FUNCTION alloc_period_accumulators (nrot_yrs, nperiods) USE period_var_type_def USE period_var_tables USE period_accumulator_vars IMPLICIT NONE INTEGER :: alloc_period_accumulators ! Allocate status return INTEGER, INTENT (IN) :: nrot_yrs ! Number of rotation years INTEGER, INTENT (IN) :: nperiods ! Number of total periods INTRINSIC ASSOCIATED ! use to verify status of pointers INTEGER :: i ! Local loop variable INTEGER :: alloc_status = 0 ! Local allocate status return INTEGER :: ret_status = 0 ! Local allocate status return alloc_period_accumulators = 0 ! Init return value to zero ALLOCATE (yrly_var(Max_yrly_vars), STAT = alloc_status) IF (alloc_status /= 0) THEN print *, "Error allocating yrly_var(Max_yrly_vars)" ret_status = ret_status + alloc_status END IF ALLOCATE (monthly_var(Max_monthly_vars), STAT = alloc_status) IF (alloc_status /= 0) THEN print *, "Error allocating monthly_var(Max_monthly_vars)" ret_status = ret_status + alloc_status END IF ALLOCATE (hmonth_var(Max_hmonth_vars), STAT = alloc_status) IF (alloc_status /= 0) THEN print *, "Error allocating monthly_var(Max_hmonth_vars)" ret_status = ret_status + alloc_status END IF ALLOCATE (period_var(Min_period_vars:Max_period_vars), STAT = alloc_status) IF (alloc_status /= 0) THEN print *, "Error allocating period_var(Min_period_vars:Max_period_vars)" ret_status = ret_status + alloc_status END IF ! Associate "count" pointers in "tmp accumulator" structures DO i=1, Max_yrly_vars yrly_var(i)%count => yrly_cntr monthly_var(i)%count => monthly_cntr END DO DO i=1, Max_hmonth_vars hmonth_var(i)%count => hmonth_cntr END DO DO i=Min_period_vars, Max_period_vars period_var(i)%count => period_cntr END DO alloc_period_accumulators = ret_status END FUNCTION alloc_period_accumulators