Add files via upload
This commit is contained in:
470
code/adjoint/gckpp_adj_Util.f90
Normal file
470
code/adjoint/gckpp_adj_Util.f90
Normal file
@ -0,0 +1,470 @@
|
||||
! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
!
|
||||
! Auxiliary Routines File
|
||||
!
|
||||
! Generated by KPP-2.2 symbolic chemistry Kinetics PreProcessor
|
||||
! (http://www.cs.vt.edu/~asandu/Software/KPP)
|
||||
! KPP is distributed under GPL, the general public licence
|
||||
! (http://www.gnu.org/copyleft/gpl.html)
|
||||
! (C) 1995-1997, V. Damian & A. Sandu, CGRER, Univ. Iowa
|
||||
! (C) 1997-2005, A. Sandu, Michigan Tech, Virginia Tech
|
||||
! With important contributions from:
|
||||
! M. Damian, Villanova University, USA
|
||||
! R. Sander, Max-Planck Institute for Chemistry, Mainz, Germany
|
||||
!
|
||||
! File : gckpp_adj_Util.f90
|
||||
! Time : Tue May 14 19:43:54 2013
|
||||
! Working directory : /home/daven/kpp-2.2.1/GC_KPP
|
||||
! Equation file : gckpp_adj.kpp
|
||||
! Output root filename : gckpp_adj
|
||||
!
|
||||
! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
|
||||
|
||||
MODULE gckpp_adj_Util
|
||||
|
||||
USE gckpp_adj_Parameters
|
||||
IMPLICIT NONE
|
||||
|
||||
CONTAINS
|
||||
|
||||
|
||||
|
||||
! User INLINED Utility Functions
|
||||
|
||||
! End INLINED Utility Functions
|
||||
|
||||
! Need to add this to the INLINE
|
||||
!------------------------------------------------------------------------------
|
||||
|
||||
SUBROUTINE INIT_KPP( )
|
||||
!
|
||||
!******************************************************************************
|
||||
! Subroutine INIT_KPP allocates global arrays (dkh, 06/07/06)
|
||||
!
|
||||
!
|
||||
! NOTES:
|
||||
! (1 ) Should make this an inlines utility?
|
||||
! (2 ) Use LAMBDA_P instead of SUM_LAMBDA. (dkh, 10/16/06)
|
||||
! (3 ) Now define JCOEFF here and initialize RCONST2RRATE array. (dkh, 10/16/06)
|
||||
! (4 ) Update to GCv8, now use VAR_R_ADJ instead of LAMBDA_P. It is not
|
||||
! dynamically allocated.
|
||||
!******************************************************************************
|
||||
!
|
||||
! Reference to f90 modules
|
||||
! Modified for reaction rate sensitivities (tww, 05/08/12)
|
||||
USE GCKPP_ADJ_GLOBAL, ONLY : NCOEFF, NCOEFF_EM
|
||||
USE GCKPP_ADJ_GLOBAL, ONLY : JCOEFF
|
||||
USE LOGICAL_ADJ_MOD, ONLY : LADJ_RRATE
|
||||
USE ADJ_ARRAYS_MOD, ONLY : ID_RRATES, NRRATES
|
||||
USE GCKPP_ADJ_GLOBAL, ONLY : DMAP
|
||||
USE GCKPP_ADJ_PARAMETERS
|
||||
|
||||
! Local variables
|
||||
INTEGER :: I
|
||||
|
||||
!=================================================================
|
||||
! INIT_KPP begins here!
|
||||
!=================================================================
|
||||
|
||||
! Select ALL reaction rate constants
|
||||
! Grab emissions rates here (tww, 05/08/12)
|
||||
DO I = 1, NCOEFF_EM-1
|
||||
JCOEFF(I) = I + 228
|
||||
ENDDO
|
||||
JCOEFF(NCOEFF_EM) = 244
|
||||
|
||||
! Get reaction rates from input.gcadj (tww, 05/08/12)
|
||||
IF ( LADJ_RRATE ) THEN
|
||||
DO I = NCOEFF_EM+1, NCOEFF_EM+NRRATES
|
||||
JCOEFF(I) = ID_RRATES(I-NCOEFF_EM)
|
||||
ENDDO
|
||||
ENDIF
|
||||
|
||||
! emissions
|
||||
DMAP(1 ) = ind_NO
|
||||
DMAP(2 ) = ind_NO2
|
||||
DMAP(3 ) = ind_CO
|
||||
DMAP(4 ) = ind_ALK4
|
||||
DMAP(5 ) = ind_ISOP
|
||||
DMAP(6 ) = ind_ACET
|
||||
DMAP(7 ) = ind_PRPE
|
||||
DMAP(8 ) = ind_C3H8
|
||||
DMAP(9 ) = ind_C2H6
|
||||
DMAP(10) = ind_MEK
|
||||
DMAP(11) = ind_ALD2
|
||||
DMAP(12) = ind_CH2O
|
||||
DMAP(13) = ind_O3
|
||||
DMAP(14) = ind_HNO3
|
||||
|
||||
! Return to calling program
|
||||
END SUBROUTINE INIT_KPP
|
||||
|
||||
!------------------------------------------------------------------------------
|
||||
|
||||
|
||||
! Utility Functions from KPP_HOME/util/util
|
||||
! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
!
|
||||
! UTIL - Utility functions
|
||||
! Arguments :
|
||||
!
|
||||
! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
! ****************************************************************
|
||||
!
|
||||
! InitSaveData - Opens the data file for writing
|
||||
! Parameters :
|
||||
!
|
||||
! ****************************************************************
|
||||
|
||||
SUBROUTINE InitSaveData ()
|
||||
|
||||
USE gckpp_adj_Parameters
|
||||
|
||||
open(10, file='gckpp_adj.dat')
|
||||
|
||||
END SUBROUTINE InitSaveData
|
||||
|
||||
! End of InitSaveData function
|
||||
! ****************************************************************
|
||||
|
||||
! ****************************************************************
|
||||
!
|
||||
! SaveData - Write LOOKAT species in the data file
|
||||
! Parameters :
|
||||
!
|
||||
! ****************************************************************
|
||||
|
||||
SUBROUTINE SaveData ()
|
||||
|
||||
USE gckpp_adj_Global
|
||||
USE gckpp_adj_Monitor
|
||||
|
||||
INTEGER i
|
||||
|
||||
WRITE(10,999) (TIME-TSTART)/3600.D0, &
|
||||
(C(LOOKAT(i))/CFACTOR, i=1,NLOOKAT)
|
||||
999 FORMAT(E24.16,100(1X,E24.16))
|
||||
|
||||
END SUBROUTINE SaveData
|
||||
|
||||
! End of SaveData function
|
||||
! ****************************************************************
|
||||
|
||||
! ****************************************************************
|
||||
!
|
||||
! CloseSaveData - Close the data file
|
||||
! Parameters :
|
||||
!
|
||||
! ****************************************************************
|
||||
|
||||
SUBROUTINE CloseSaveData ()
|
||||
|
||||
USE gckpp_adj_Parameters
|
||||
|
||||
CLOSE(10)
|
||||
|
||||
END SUBROUTINE CloseSaveData
|
||||
|
||||
! End of CloseSaveData function
|
||||
! ****************************************************************
|
||||
|
||||
! ****************************************************************
|
||||
!
|
||||
! GenerateMatlab - Generates MATLAB file to load the data file
|
||||
! Parameters :
|
||||
! It will have a character string to prefix each
|
||||
! species name with.
|
||||
!
|
||||
! ****************************************************************
|
||||
|
||||
SUBROUTINE GenerateMatlab ( PREFIX )
|
||||
|
||||
USE gckpp_adj_Parameters
|
||||
USE gckpp_adj_Global
|
||||
USE gckpp_adj_Monitor
|
||||
|
||||
|
||||
CHARACTER(LEN=8) PREFIX
|
||||
INTEGER i
|
||||
|
||||
open(20, file='gckpp_adj.m')
|
||||
write(20,*) 'load gckpp_adj.dat;'
|
||||
write(20,990) PREFIX
|
||||
990 FORMAT(A1,'c = gckpp_adj;')
|
||||
write(20,*) 'clear gckpp_adj;'
|
||||
write(20,991) PREFIX, PREFIX
|
||||
991 FORMAT(A1,'t=',A1,'c(:,1);')
|
||||
write(20,992) PREFIX
|
||||
992 FORMAT(A1,'c(:,1)=[];')
|
||||
|
||||
do i=1,NLOOKAT
|
||||
write(20,993) PREFIX, SPC_NAMES(LOOKAT(i)), PREFIX, i
|
||||
993 FORMAT(A1,A6,' = ',A1,'c(:,',I2,');')
|
||||
end do
|
||||
|
||||
CLOSE(20)
|
||||
|
||||
END SUBROUTINE GenerateMatlab
|
||||
|
||||
! End of GenerateMatlab function
|
||||
! ****************************************************************
|
||||
|
||||
|
||||
! End Utility Functions from KPP_HOME/util/util
|
||||
! End of UTIL function
|
||||
! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
|
||||
! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
!
|
||||
! Shuffle_user2kpp - function to copy concentrations from USER to KPP
|
||||
! Arguments :
|
||||
! V_USER - Concentration of variable species in USER's order
|
||||
! V - Concentrations of variable species (local)
|
||||
!
|
||||
! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
SUBROUTINE Shuffle_user2kpp ( V_USER, V )
|
||||
|
||||
! V_USER - Concentration of variable species in USER's order
|
||||
REAL(kind=dp) :: V_USER(NVAR)
|
||||
! V - Concentrations of variable species (local)
|
||||
REAL(kind=dp) :: V(NVAR)
|
||||
|
||||
V(52) = V_USER(1)
|
||||
V(49) = V_USER(2)
|
||||
V(71) = V_USER(3)
|
||||
V(22) = V_USER(4)
|
||||
V(62) = V_USER(5)
|
||||
V(53) = V_USER(6)
|
||||
V(23) = V_USER(7)
|
||||
V(16) = V_USER(8)
|
||||
V(69) = V_USER(9)
|
||||
V(47) = V_USER(10)
|
||||
V(1) = V_USER(11)
|
||||
V(2) = V_USER(12)
|
||||
V(3) = V_USER(13)
|
||||
V(4) = V_USER(14)
|
||||
V(5) = V_USER(15)
|
||||
V(6) = V_USER(16)
|
||||
V(7) = V_USER(17)
|
||||
V(8) = V_USER(18)
|
||||
V(9) = V_USER(19)
|
||||
V(10) = V_USER(20)
|
||||
V(74) = V_USER(21)
|
||||
V(35) = V_USER(22)
|
||||
V(88) = V_USER(23)
|
||||
V(50) = V_USER(24)
|
||||
V(36) = V_USER(25)
|
||||
V(19) = V_USER(26)
|
||||
V(17) = V_USER(27)
|
||||
V(61) = V_USER(28)
|
||||
V(24) = V_USER(29)
|
||||
V(56) = V_USER(30)
|
||||
V(29) = V_USER(31)
|
||||
V(84) = V_USER(32)
|
||||
V(58) = V_USER(33)
|
||||
V(66) = V_USER(34)
|
||||
V(41) = V_USER(35)
|
||||
V(67) = V_USER(36)
|
||||
V(39) = V_USER(37)
|
||||
V(65) = V_USER(38)
|
||||
V(43) = V_USER(39)
|
||||
V(46) = V_USER(40)
|
||||
V(60) = V_USER(41)
|
||||
V(80) = V_USER(42)
|
||||
V(55) = V_USER(43)
|
||||
V(78) = V_USER(44)
|
||||
V(26) = V_USER(45)
|
||||
V(27) = V_USER(46)
|
||||
V(86) = V_USER(47)
|
||||
V(76) = V_USER(48)
|
||||
V(75) = V_USER(49)
|
||||
V(90) = V_USER(50)
|
||||
V(28) = V_USER(51)
|
||||
V(59) = V_USER(52)
|
||||
V(40) = V_USER(53)
|
||||
V(77) = V_USER(54)
|
||||
V(51) = V_USER(55)
|
||||
V(25) = V_USER(56)
|
||||
V(85) = V_USER(57)
|
||||
V(82) = V_USER(58)
|
||||
V(87) = V_USER(59)
|
||||
V(89) = V_USER(60)
|
||||
V(83) = V_USER(61)
|
||||
V(21) = V_USER(62)
|
||||
V(44) = V_USER(63)
|
||||
V(70) = V_USER(64)
|
||||
V(37) = V_USER(65)
|
||||
V(18) = V_USER(66)
|
||||
V(63) = V_USER(67)
|
||||
V(48) = V_USER(68)
|
||||
V(38) = V_USER(69)
|
||||
V(54) = V_USER(70)
|
||||
V(73) = V_USER(71)
|
||||
V(72) = V_USER(72)
|
||||
V(30) = V_USER(73)
|
||||
V(31) = V_USER(74)
|
||||
V(32) = V_USER(75)
|
||||
V(68) = V_USER(76)
|
||||
V(81) = V_USER(77)
|
||||
V(57) = V_USER(78)
|
||||
V(79) = V_USER(79)
|
||||
V(45) = V_USER(80)
|
||||
V(33) = V_USER(81)
|
||||
V(64) = V_USER(82)
|
||||
V(42) = V_USER(83)
|
||||
V(34) = V_USER(84)
|
||||
V(20) = V_USER(85)
|
||||
V(11) = V_USER(86)
|
||||
V(12) = V_USER(87)
|
||||
V(13) = V_USER(88)
|
||||
V(14) = V_USER(89)
|
||||
|
||||
END SUBROUTINE Shuffle_user2kpp
|
||||
|
||||
! End of Shuffle_user2kpp function
|
||||
! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
|
||||
! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
!
|
||||
! Shuffle_kpp2user - function to restore concentrations from KPP to USER
|
||||
! Arguments :
|
||||
! V - Concentrations of variable species (local)
|
||||
! V_USER - Concentration of variable species in USER's order
|
||||
!
|
||||
! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
SUBROUTINE Shuffle_kpp2user ( V, V_USER )
|
||||
|
||||
! V - Concentrations of variable species (local)
|
||||
REAL(kind=dp) :: V(NVAR)
|
||||
! V_USER - Concentration of variable species in USER's order
|
||||
REAL(kind=dp) :: V_USER(NVAR)
|
||||
|
||||
V_USER(1) = V(52)
|
||||
V_USER(2) = V(49)
|
||||
V_USER(3) = V(71)
|
||||
V_USER(4) = V(22)
|
||||
V_USER(5) = V(62)
|
||||
V_USER(6) = V(53)
|
||||
V_USER(7) = V(23)
|
||||
V_USER(8) = V(16)
|
||||
V_USER(9) = V(69)
|
||||
V_USER(10) = V(47)
|
||||
V_USER(11) = V(1)
|
||||
V_USER(12) = V(2)
|
||||
V_USER(13) = V(3)
|
||||
V_USER(14) = V(4)
|
||||
V_USER(15) = V(5)
|
||||
V_USER(16) = V(6)
|
||||
V_USER(17) = V(7)
|
||||
V_USER(18) = V(8)
|
||||
V_USER(19) = V(9)
|
||||
V_USER(20) = V(10)
|
||||
V_USER(21) = V(74)
|
||||
V_USER(22) = V(35)
|
||||
V_USER(23) = V(88)
|
||||
V_USER(24) = V(50)
|
||||
V_USER(25) = V(36)
|
||||
V_USER(26) = V(19)
|
||||
V_USER(27) = V(17)
|
||||
V_USER(28) = V(61)
|
||||
V_USER(29) = V(24)
|
||||
V_USER(30) = V(56)
|
||||
V_USER(31) = V(29)
|
||||
V_USER(32) = V(84)
|
||||
V_USER(33) = V(58)
|
||||
V_USER(34) = V(66)
|
||||
V_USER(35) = V(41)
|
||||
V_USER(36) = V(67)
|
||||
V_USER(37) = V(39)
|
||||
V_USER(38) = V(65)
|
||||
V_USER(39) = V(43)
|
||||
V_USER(40) = V(46)
|
||||
V_USER(41) = V(60)
|
||||
V_USER(42) = V(80)
|
||||
V_USER(43) = V(55)
|
||||
V_USER(44) = V(78)
|
||||
V_USER(45) = V(26)
|
||||
V_USER(46) = V(27)
|
||||
V_USER(47) = V(86)
|
||||
V_USER(48) = V(76)
|
||||
V_USER(49) = V(75)
|
||||
V_USER(50) = V(90)
|
||||
V_USER(51) = V(28)
|
||||
V_USER(52) = V(59)
|
||||
V_USER(53) = V(40)
|
||||
V_USER(54) = V(77)
|
||||
V_USER(55) = V(51)
|
||||
V_USER(56) = V(25)
|
||||
V_USER(57) = V(85)
|
||||
V_USER(58) = V(82)
|
||||
V_USER(59) = V(87)
|
||||
V_USER(60) = V(89)
|
||||
V_USER(61) = V(83)
|
||||
V_USER(62) = V(21)
|
||||
V_USER(63) = V(44)
|
||||
V_USER(64) = V(70)
|
||||
V_USER(65) = V(37)
|
||||
V_USER(66) = V(18)
|
||||
V_USER(67) = V(63)
|
||||
V_USER(68) = V(48)
|
||||
V_USER(69) = V(38)
|
||||
V_USER(70) = V(54)
|
||||
V_USER(71) = V(73)
|
||||
V_USER(72) = V(72)
|
||||
V_USER(73) = V(30)
|
||||
V_USER(74) = V(31)
|
||||
V_USER(75) = V(32)
|
||||
V_USER(76) = V(68)
|
||||
V_USER(77) = V(81)
|
||||
V_USER(78) = V(57)
|
||||
V_USER(79) = V(79)
|
||||
V_USER(80) = V(45)
|
||||
V_USER(81) = V(33)
|
||||
V_USER(82) = V(64)
|
||||
V_USER(83) = V(42)
|
||||
V_USER(84) = V(34)
|
||||
V_USER(85) = V(20)
|
||||
V_USER(86) = V(11)
|
||||
V_USER(87) = V(12)
|
||||
V_USER(88) = V(13)
|
||||
V_USER(89) = V(14)
|
||||
|
||||
END SUBROUTINE Shuffle_kpp2user
|
||||
|
||||
! End of Shuffle_kpp2user function
|
||||
! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
|
||||
! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
!
|
||||
! GetMass - compute total mass of selected atoms
|
||||
! Arguments :
|
||||
! CL - Concentration of all species (local)
|
||||
! Mass - value of mass balance
|
||||
!
|
||||
! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
SUBROUTINE GetMass ( CL, Mass )
|
||||
|
||||
! CL - Concentration of all species (local)
|
||||
REAL(kind=dp) :: CL(NSPEC)
|
||||
! Mass - value of mass balance
|
||||
REAL(kind=dp) :: Mass(1)
|
||||
|
||||
|
||||
END SUBROUTINE GetMass
|
||||
|
||||
! End of GetMass function
|
||||
! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
|
||||
|
||||
END MODULE gckpp_adj_Util
|
||||
|
Reference in New Issue
Block a user