!$Author$ !$Date$ !$Revision$ !$HeadURL$ module phase_factory_mod use phases_mod use PhenologyMMSBasephenol_mod use PhenologyMMSFallphenol_mod use PhenologyMMSGermination_mod use PhenologyMMSShootGRG_mod use PhenologyMMSSpringphenol_mod use WEPSDeciduousWood_mod use WEPSEvergreenWood_mod use WEPSShootGrow_mod contains function create_phase(phaseName, phaseLabel, phaseType) result(phasePtr) class(phase), pointer :: phasePtr character(len=*), intent(in) :: phaseName ! please trim, all lower case. character(len=*), intent(in) :: phaseLabel ! please trim, all lower case. integer :: phaseType ! 0 normal, 1 regrowth, 2 sets a state and next runs immediately nullify(phasePtr) if (phaseName == "PhenologyMMS_Germination") then allocate(PhenologyMMS_Germination :: phasePtr) elseif (phaseName == "PhenologyMMS_ShootGRG") then allocate(PhenologyMMS_ShootGRG :: phasePtr) elseif (phaseName == "PhenologyMMS_Basephenol") then allocate(PhenologyMMS_Basephenol :: phasePtr) elseif (phaseName == "PhenologyMMS_Springphenol") then allocate(PhenologyMMS_Springphenol :: phasePtr) elseif (phaseName == "PhenologyMMS_Fallphenol") then allocate(PhenologyMMS_Fallphenol :: phasePtr) elseif(phaseName == "WEPS_DeciduousWood") then allocate(WEPS_DeciduousWood:: phasePtr) elseif(phaseName == "WEPS_EvergreenWood") then allocate(WEPS_EvergreenWood:: phasePtr) elseif(phaseName == "WEPS_ShootGrow") then allocate(WEPS_ShootGrow:: phasePtr) !elseif(phaseName == "phase") then !allocate( phase:: phasePtr) else write(*,*) 'ERROR: Invalid Phase Name: ', trim(phaseName) stop endif if( associated(phasePtr) ) then phasePtr%phaseName = phaseName phasePtr%phaseLabel = phaseLabel call phasePtr%phasePars%init() call phasePtr%phaseState%init() phasePtr%phaseType = phaseType nullify( phasePtr%phaseChild ) nullify( phasePtr%phaseSub ) nullify( phasePtr%phaseRegrow ) end if end function create_phase end module phase_factory_mod