FUNCTION alloc_period_vars (nrot_yrs, nperiods) USE period_var_type_def USE period_var_tables USE period_vars IMPLICIT NONE INTEGER :: alloc_period_vars ! 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, j, m ! Local loop variables INTEGER :: alloc_status = 0 ! Local allocate status return INTEGER :: ret_status = 0 ! Local allocate status return alloc_period_vars = 0 ! Init return value ! Allocate for reporting period counters ALLOCATE (yrly_ave_cntr(0:nrot_yrs), STAT = alloc_status) IF (alloc_status /= 0) THEN print *, "Error allocating yrly_ave_cntrs(0:nrot_yrs)" ret_status = ret_status + alloc_status END IF ALLOCATE (monthly_ave_cntr(1:12,0:nrot_yrs), STAT = alloc_status) IF (alloc_status /= 0) THEN print *, "Error allocating monthly_ave_cntrs(1:12,0:nrot_yrs)" ret_status = ret_status + alloc_status END IF ALLOCATE (hmonth_ave_cntr(1:nrot_yrs*24), STAT = alloc_status) IF (alloc_status /= 0) THEN print *, "Error allocating period_ave_cntrs(1:nrot_yrs*24)" ret_status = ret_status + alloc_status END IF ALLOCATE (period_ave_cntr(1:nperiods), STAT = alloc_status) IF (alloc_status /= 0) THEN print *, "Error allocating period_ave_cntrs(1:nperiods)" ret_status = ret_status + alloc_status END IF ! Allocate for all variables being reported ALLOCATE (yrly_ave(Max_yrly_vars,0:nrot_yrs), STAT = alloc_status) IF (alloc_status /= 0) THEN print *, "Error allocating yrly_ave(Max_yrly_vars,0:nrot_yrs)" ret_status = ret_status + alloc_status END IF ALLOCATE (monthly_ave(Max_monthly_vars,1:12,0:nrot_yrs), STAT = alloc_status) IF (alloc_status /= 0) THEN print *, "Error allocating monthly_ave(Max_monthly_vars,1:12,0:nrot_yrs)" ret_status = ret_status + alloc_status END IF ALLOCATE (hmonth_ave(Max_hmonth_vars,1:nrot_yrs*24), STAT = alloc_status) IF (alloc_status /= 0) THEN print *, "Error allocating hmonth_ave(Max_hmonth_vars,1:nrot_yrs*24)" ret_status = ret_status + alloc_status END IF ALLOCATE (period_ave(Min_period_vars:Max_period_vars,1:nperiods), STAT = alloc_status) IF (alloc_status /= 0) THEN print *, "Error allocating period_ave(Min_period_vars:Max_period_vars,1:nperiods)" ret_status = ret_status + alloc_status END IF ! Associate "count" pointers in "variable average" structures do i=1, Max_yrly_vars do j=0, nrot_yrs yrly_ave(i,j)%count => yrly_ave_cntr(j) end do do m=1, 12 !for each month do j=0, nrot_yrs monthly_ave(i,m,j)%count => monthly_ave_cntr(m,j) end do end do end do do i=1, Max_hmonth_vars do j=1, nrot_yrs*24 hmonth_ave(i,j)%count => hmonth_ave_cntr(j) end do end do do i=Min_period_vars, Max_period_vars do j=1, nperiods period_ave(i,j)%count => period_ave_cntr(j) end do end do alloc_period_vars = ret_status END FUNCTION alloc_period_vars