From 79287906b57d5cef15320d3af3c8c3d9e933eddd Mon Sep 17 00:00:00 2001 From: Julia Putko Date: Wed, 16 Jun 2021 17:00:20 -0700 Subject: [PATCH 01/63] added vars from ice_uvic --- src/gotm/register_all_variables.F90 | 108 ++++++++++++++++++++++++++++ 1 file changed, 108 insertions(+) diff --git a/src/gotm/register_all_variables.F90 b/src/gotm/register_all_variables.F90 index 00f0e50e..eaab0c0a 100644 --- a/src/gotm/register_all_variables.F90 +++ b/src/gotm/register_all_variables.F90 @@ -190,6 +190,7 @@ subroutine register_stim_variables(nlev) use stim_variables, only: Hice, Hfrazil, dHis, dHib use stim_variables, only: surface_ice_energy,bottom_ice_energy use stim_variables, only: ocean_ice_flux + use stim_variables, only: nilay, sfall_method,const_sfall, dfact , depmix, sice_method, snow_dist, const_Sice, distr_type, meltpond, Ameltmax, drainrate, hh0, ice_hi_i, ice_hs_i, albice_method, albice_f, albmelt, albsnow_f, albice_m, albsnow_m, transsf, transsm, transif, transim, transm, swkappasm, swkappasf, swkappaim, swkappaif IMPLICIT NONE ! ! !INPUT PARAMETERS: @@ -214,6 +215,113 @@ subroutine register_stim_variables(nlev) call fm%register('Hfrazil', 'm', 'ice thickness (frazil)', standard_name='', data0d=Hfrazil, category='ice') call fm%register('dHis', 'm', 'ice growth (surface)', standard_name='', data0d=dHis, category='ice') call fm%register('dHib', 'm', 'ice growth (bottom)', standard_name='', data0d=dHib, category='ice') + !Flato +! public vars +#if 0 + !***************** + call fm%register('hlaymin', '', '', standard_name='', data0d=hlaymin, category='ice') + call fm%register('rhoice', '', '', standard_name='', data0d=rhoice, category='ice') + call fm%register('Tfreezi', '', '', standard_name='', data0d=Tfreezi, category='ice') + call fm%register('rCpmix', '', '', standard_name='', data0d=rCpmix, category='ice') + call fm%register('Hfi', '', '', standard_name='', data0d=Hfi, category='ice') + call fm%register('hsmin', 'm', 'minimum snow thickness required for separate snow layer', standard_name='', data0d=hsmin, category='ice') + call fm%register('theta ', '', 'a parameter between 0.5 and 1. which determines how implicit the scheme is', standard_name='', data0d=theta, category='ice') + call fm%register('sigma ', 'W m-2 K-4)', 'Stefan-Boltzmann constant', standard_name='', data0d=sigma, category='ice') + call fm%register('epsilon', 'dimensionless', 'emissivity of ice', standard_name='', data0d=epsilon, category='ice') + call fm%register('PenFrac', '', 'fraction of incoming short wave radiation that penetrates the surface', standard_name='', data0d=PenFrac, category='ice') + call fm%register('hlaymin', 'm', 'thickness below which a linear temperature profile is assumed', standard_name='', data0d=hlaymin, category='ice') + call fm%register('rhoscold', 'kg m-3', 'specified cold snow density', standard_name='', data0d=rhoscold, category='ice') + call fm%register('rhoswarm', 'kg m-3', 'specified warm snow density', standard_name='', data0d=rhoswarm, category='ice') + call fm%register('rhowaterfresh', 'kg m-3', 'fresh water density', standard_name='', data0d=rhowaterfresh, category='ice') + call fm%register('rhoice', 'kg m-3', 'ice density', standard_name='', data0d=rhoice, category='ice') + call fm%register('kelvin', 'K', 'zero deg Celsius', standard_name='', data0d=kelvin, category='ice') + call fm%register('Tmelts', 'K', 'melting temperature of snow (fresh water)', standard_name='', data0d=Tmelts, category='ice') + call fm%register('Tmelti', 'K', 'melting temperature of sea ice', standard_name='', data0d=Tmelti, category='ice') + call fm%register('Condfi', 'W m-1 K-1', 'conductivity of pure ice', standard_name='', data0d=Condfi, category='ice') + call fm%register('rhoCpfi', 'J m-3 K-1', 'heat capacity of pure ice', standard_name='', data0d=rhoCpfi, category='ice') + call fm%register('rCpmix', 'J m-3 K-1', 'volumetric heat capacity of sea water ', standard_name='', data0d=rrCpmix, category='ice') + call fm%register('Hfi', 'J kg-1', 'latent heat of fusion of sea ice ', standard_name='', data0d=Hfi , category='ice') + call fm%register('Hfw', 'J kg-1', 'latent heat of fusion of fresh water', standard_name='', data0d=Hfw, category='ice') + call fm%register('swkappa', 'm-1', 'bulk short-wave extinction coefficient', standard_name='', data0d=swkappa , category='ice') + call fm%register('Tfreezi', 'K', 'freezing temperature of sea water', standard_name='', data0d=Tfreezi , category='ice') + call fm%register('nlmax', '', 'Maximum snow and ice layers', standard_name='', data0d=nlmax , category='ice') + +#endif +! local vars + +#if 0 + call fm%register('rhosnow', 'kg m-3', 'snow density', standard_name='', data0d=rhosnow, category='ice') + call fm%register('Iceflux', 'W m-2', '2-element array of time-step averaged boundary fluxes', standard_name='', data2d=Iceflux, category='ice') + call fm%register('bctype', '', '2 element array defining upper and lower boundary condition type', standard_name='', data2d=bctype, category='ice') + call fm%register('bcs', 'W m-2', '2 element array containing boundary condition values', standard_name='', data2d=bcs, category='ice') + call fm%register('dti', '', 'timestep in the ice model', standard_name='', data0d=dti, category='ice') + call fm%register('qb', 'W m-2', 'long wave back radiation (in-out)', standard_name='', data0d=qb, category='ice') + call fm%register('qh', 'W m-2', 'latent heat flux into ice', standard_name='', data0d=qh, category='ice') + call fm%register('qe', 'W m-2', 'sensible heat flux into ice', standard_name='', data0d=qe, category='ice') + call fm%register('tx', 'Pa', 'surface stress components in x direction', standard_name='', data0d=tx, category='ice') + call fm%register('ty', 'Pa', 'surface stress components in y direction', standard_name='', data0d=ty, category='ice') + call fm%register('PenSW', 'W m-2', 'short wave radiation that penetrates the surface', standard_name='', data0d=PenSW, category='ice') + call fm%register('fluxt', 'W m-2', 'net flux at surface of ice/snow slab', standard_name='', data0d=fluxt, category='ice') + call fm%register('simass', 'kg m-2', 'ice mass per unit area', standard_name='', data0d=simass, category='ice') + call fm%register('snmass', 'kg m-2', 'snow mass per unit area ', standard_name='', data0d=snmass, category='ice') + call fm%register('simasso', 'kg m-2', 'ice mass per unit area at previous timestep', standard_name='', data0d=simasso, category='ice') + call fm%register('snmasso', 'kg m-2', 'snow mass per unit area at previous timestep', standard_name='', data0d=snmasso, category='ice') + call fm%register('Ts', 'K', 'upper surface temperature', standard_name='', data0d=Ts, category='ice') + call fm%register('Tsav', 'K', 'average snow layer temperature', standard_name='', data0d=Tsav , category='ice') + call fm%register('ice_salt', '', 'logical variable to turn on/off the salt profile scheme', category='ice') + call fm%register('sfall', 'm s-1', 'snow fall rate', standard_name='', data0d=sfall, category='ice') + call fm%register('airtk', 'K', 'surface air temperature', standard_name='', data0d=airtk, category='ice') + call fm%register('C', '', 'coefficients for', standard_name='', data0d=C, category='ice') + call fm%register('R', '', 'coefficients for RHS vector', standard_name='', data0d=R, category='ice') + call fm%register('dto', 'dt', 'time step from GOTM', standard_name='', data0d=dto, category='ice') + call fm%register('nslay', '', 'number of snow layers', standard_name='', data0d=nslay, category='ice') + call fm%register('Asnow', '', 'Area which is covered with snow ', standard_name='', data0d=Asnow, category='ice') + call fm%register('Aice', '', 'Area which is covered with ice', standard_name='', data0d=Aice, category='ice') + call fm%register('Amelt', '', 'Area which is covered with melt pond', standard_name='', data0d=Amelt, category='ice') + call fm%register('hsmax', '', 'Maximal height of snow for the calculations of Weibull-distributed snow', standard_name='', data0d=hsmax, category='ice') + call fm%register('albice', '', 'Albedo of ice', standard_name='', data0d=albice, category='ice') + call fm%register('albsnow', '', 'Albedo of snow', standard_name='', data0d=albsnow, category='ice') + call fm%register('meltmass', 'kg m-2', 'melt pond mass per unit area', standard_name='', data0d=meltmass, category='ice') + call fm%register('meltmasso', 'kg m-2', 'melt pond mass per unit area at previous timestep', standard_name='', data0d=meltmasso, category='ice') + call fm%register('pi', '', 'Pi', standard_name='', data0d=pi, category='ice') + +#endif +! yaml vars + call fm%register('nilay', '', 'number of ice layers', category='ice') + call fm%register('sfall_method', '', '1:constant snow fall 2:calculate snowfall from precipitation', category='ice') + call fm%register('const_sfall ', 'm d^-1', 'constant snow fall rate', standard_name='', data0d=const_sfall , category='ice') + call fm%register('dfact ', '', 'drift factor allowing a factor to increase snow fall from precipitation via drifing snow', standard_name='', data0d=dfact , category='ice') + call fm%register('depmix ', '', 'prescribed mixed layer depth', standard_name='', data0d=depmix , category='ice') + call fm%register('sice_method ', '', ' 1: constant ice salinity 2: Simple ice salinity profile', category='ice') + call fm%register('const_Sice', 'ppt','prescribed sea ice salinity', standard_name='', data0d=const_Sice, category='ice') + call fm%register('snow_dist ', '', 'logical switch between uniform and Weibull-distributed snow', category='ice') + call fm%register('distr_type', '', 'integer to chose the type of distribution', category='ice') + call fm%register('meltpond', '', 'If true meltponds are included If false only bare ice is included', category='ice') + call fm%register('Ameltmax ', '', 'Maximum meltpond area fraction allowed', standard_name='', data0d= Ameltmax , category='ice') + call fm%register('drainrate', 'm/d', 'Melt pond drainage rate in ', standard_name='', data0d=drainrate, category='ice') + call fm%register('hh0', '', 'initial thickness for S calculation', standard_name='', data0d=hh0, category='ice') + call fm%register('ice_hi_i ', '', 'initial ice thickness', standard_name='', data0d=ice_hi_i , category='ice') + call fm%register('ice_hs_i ', '', ' initial snow thickness', standard_name='', data0d=ice_hs_i , category='ice') + call fm%register('albice_method ', '', ' albice method', category='ice') + call fm%register('albice_f', '', 'ice thickness frazil', standard_name='', data0d= albice_f, category='ice') + call fm%register('albmelt', '', 'ice thickness frazil', standard_name='', data0d=albmelt, category='ice') + call fm%register('albsnow_f', '', 'ice thickness frazil', standard_name='', data0d=albsnow_f , category='ice') + call fm%register('albice_m ', '', 'melting ice albedo', standard_name='', data0d=albice_m , category='ice') + call fm%register('albsnow_m', '', 'melting snow albedo', standard_name='', data0d= albsnow_m, category='ice') + call fm%register('transsf', '', 'freezing snow transmission coefficient', standard_name='', data0d=transsf, category='ice') + call fm%register('transsm ', '', 'melting snow transmission coefficient', standard_name='', data0d=transsm, category='ice') + call fm%register('transif ', '', 'freezing ice transmission coefficient', standard_name='', data0d=transif, category='ice') + call fm%register('transim ', '', 'melting ice transmission coefficient', standard_name='', data0d=transim, category='ice') + call fm%register('transm', '', 'melt pond transmision coefficient', standard_name='', data0d=transm, category='ice') + call fm%register('swkappasm', '', 'melting snow extinction coefficient', standard_name='', data0d=swkappasm, category='ice') + call fm%register('swkappasf ', '', 'freezing snow extinction coefficient', standard_name='', data0d=swkappasf, category='ice') + call fm%register('swkappaim ', '', 'melting ice extinction coefficient', standard_name='', data0d=swkappaim, category='ice') + call fm%register('swkappaif', '', 'freezing ice extinction coefficient', standard_name='', data0d=swkappaif, category='ice') +! +!****************** + + + return end subroutine register_stim_variables From 68b9b7f69116862b90626bc8d37bac5425fd993a Mon Sep 17 00:00:00 2001 From: Julia Putko Date: Thu, 17 Jun 2021 13:56:27 -0700 Subject: [PATCH 02/63] adding variables --- src/gotm/register_all_variables.F90 | 82 +++++++---------------------- 1 file changed, 18 insertions(+), 64 deletions(-) diff --git a/src/gotm/register_all_variables.F90 b/src/gotm/register_all_variables.F90 index eaab0c0a..aff16a44 100644 --- a/src/gotm/register_all_variables.F90 +++ b/src/gotm/register_all_variables.F90 @@ -189,8 +189,9 @@ subroutine register_stim_variables(nlev) use stim_variables, only: Tice_surface,Tice,Tf use stim_variables, only: Hice, Hfrazil, dHis, dHib use stim_variables, only: surface_ice_energy,bottom_ice_energy - use stim_variables, only: ocean_ice_flux - use stim_variables, only: nilay, sfall_method,const_sfall, dfact , depmix, sice_method, snow_dist, const_Sice, distr_type, meltpond, Ameltmax, drainrate, hh0, ice_hi_i, ice_hs_i, albice_method, albice_f, albmelt, albsnow_f, albice_m, albsnow_m, transsf, transsm, transif, transim, transm, swkappasm, swkappasf, swkappaim, swkappaif + !use stim_variables, only: ocean_ice_flux + use stim_variables!, only: nilay, sfall_method,const_sfall, dfact , depmix, sice_method, snow_dist, const_Sice, distr_type, meltpond, Ameltmax, drainrate, hh0, ice_hi_i, ice_hs_i, albice_method, albice_f, albmelt, albsnow_f, albice_m, albsnow_m, transsf, transsm, transif, transim, transm, swkappasm, swkappasf, swkappaim, swkappaif + IMPLICIT NONE ! ! !INPUT PARAMETERS: @@ -217,13 +218,11 @@ subroutine register_stim_variables(nlev) call fm%register('dHib', 'm', 'ice growth (bottom)', standard_name='', data0d=dHib, category='ice') !Flato ! public vars -#if 0 - !***************** - call fm%register('hlaymin', '', '', standard_name='', data0d=hlaymin, category='ice') - call fm%register('rhoice', '', '', standard_name='', data0d=rhoice, category='ice') - call fm%register('Tfreezi', '', '', standard_name='', data0d=Tfreezi, category='ice') - call fm%register('rCpmix', '', '', standard_name='', data0d=rCpmix, category='ice') - call fm%register('Hfi', '', '', standard_name='', data0d=Hfi, category='ice') + !call fm%register('hlaymin', '', 'hlaymin', standard_name='', data0d=hlaymin, category='ice') + !call fm%register('rhoice', '', 'rhoice', standard_name='', data0d=rhoice, category='ice') + !call fm%register('Tfreezi', '', 'Tfreezi', standard_name='', data0d=Tfreezi, category='ice') + !call fm%register('rCpmix', '', 'rCpmix', standard_name='', data0d=rCpmix, category='ice') + !call fm%register('Hfi', '', 'Hfi', standard_name='', data0d=Hfi, category='ice') call fm%register('hsmin', 'm', 'minimum snow thickness required for separate snow layer', standard_name='', data0d=hsmin, category='ice') call fm%register('theta ', '', 'a parameter between 0.5 and 1. which determines how implicit the scheme is', standard_name='', data0d=theta, category='ice') call fm%register('sigma ', 'W m-2 K-4)', 'Stefan-Boltzmann constant', standard_name='', data0d=sigma, category='ice') @@ -239,70 +238,29 @@ subroutine register_stim_variables(nlev) call fm%register('Tmelti', 'K', 'melting temperature of sea ice', standard_name='', data0d=Tmelti, category='ice') call fm%register('Condfi', 'W m-1 K-1', 'conductivity of pure ice', standard_name='', data0d=Condfi, category='ice') call fm%register('rhoCpfi', 'J m-3 K-1', 'heat capacity of pure ice', standard_name='', data0d=rhoCpfi, category='ice') - call fm%register('rCpmix', 'J m-3 K-1', 'volumetric heat capacity of sea water ', standard_name='', data0d=rrCpmix, category='ice') + call fm%register('rCpmix', 'J m-3 K-1', 'volumetric heat capacity of sea water ', standard_name='', data0d=rCpmix, category='ice') call fm%register('Hfi', 'J kg-1', 'latent heat of fusion of sea ice ', standard_name='', data0d=Hfi , category='ice') call fm%register('Hfw', 'J kg-1', 'latent heat of fusion of fresh water', standard_name='', data0d=Hfw, category='ice') call fm%register('swkappa', 'm-1', 'bulk short-wave extinction coefficient', standard_name='', data0d=swkappa , category='ice') call fm%register('Tfreezi', 'K', 'freezing temperature of sea water', standard_name='', data0d=Tfreezi , category='ice') - call fm%register('nlmax', '', 'Maximum snow and ice layers', standard_name='', data0d=nlmax , category='ice') - -#endif -! local vars - -#if 0 - call fm%register('rhosnow', 'kg m-3', 'snow density', standard_name='', data0d=rhosnow, category='ice') - call fm%register('Iceflux', 'W m-2', '2-element array of time-step averaged boundary fluxes', standard_name='', data2d=Iceflux, category='ice') - call fm%register('bctype', '', '2 element array defining upper and lower boundary condition type', standard_name='', data2d=bctype, category='ice') - call fm%register('bcs', 'W m-2', '2 element array containing boundary condition values', standard_name='', data2d=bcs, category='ice') - call fm%register('dti', '', 'timestep in the ice model', standard_name='', data0d=dti, category='ice') - call fm%register('qb', 'W m-2', 'long wave back radiation (in-out)', standard_name='', data0d=qb, category='ice') - call fm%register('qh', 'W m-2', 'latent heat flux into ice', standard_name='', data0d=qh, category='ice') - call fm%register('qe', 'W m-2', 'sensible heat flux into ice', standard_name='', data0d=qe, category='ice') - call fm%register('tx', 'Pa', 'surface stress components in x direction', standard_name='', data0d=tx, category='ice') - call fm%register('ty', 'Pa', 'surface stress components in y direction', standard_name='', data0d=ty, category='ice') - call fm%register('PenSW', 'W m-2', 'short wave radiation that penetrates the surface', standard_name='', data0d=PenSW, category='ice') - call fm%register('fluxt', 'W m-2', 'net flux at surface of ice/snow slab', standard_name='', data0d=fluxt, category='ice') - call fm%register('simass', 'kg m-2', 'ice mass per unit area', standard_name='', data0d=simass, category='ice') - call fm%register('snmass', 'kg m-2', 'snow mass per unit area ', standard_name='', data0d=snmass, category='ice') - call fm%register('simasso', 'kg m-2', 'ice mass per unit area at previous timestep', standard_name='', data0d=simasso, category='ice') - call fm%register('snmasso', 'kg m-2', 'snow mass per unit area at previous timestep', standard_name='', data0d=snmasso, category='ice') - call fm%register('Ts', 'K', 'upper surface temperature', standard_name='', data0d=Ts, category='ice') - call fm%register('Tsav', 'K', 'average snow layer temperature', standard_name='', data0d=Tsav , category='ice') - call fm%register('ice_salt', '', 'logical variable to turn on/off the salt profile scheme', category='ice') - call fm%register('sfall', 'm s-1', 'snow fall rate', standard_name='', data0d=sfall, category='ice') - call fm%register('airtk', 'K', 'surface air temperature', standard_name='', data0d=airtk, category='ice') - call fm%register('C', '', 'coefficients for', standard_name='', data0d=C, category='ice') - call fm%register('R', '', 'coefficients for RHS vector', standard_name='', data0d=R, category='ice') - call fm%register('dto', 'dt', 'time step from GOTM', standard_name='', data0d=dto, category='ice') - call fm%register('nslay', '', 'number of snow layers', standard_name='', data0d=nslay, category='ice') - call fm%register('Asnow', '', 'Area which is covered with snow ', standard_name='', data0d=Asnow, category='ice') - call fm%register('Aice', '', 'Area which is covered with ice', standard_name='', data0d=Aice, category='ice') - call fm%register('Amelt', '', 'Area which is covered with melt pond', standard_name='', data0d=Amelt, category='ice') - call fm%register('hsmax', '', 'Maximal height of snow for the calculations of Weibull-distributed snow', standard_name='', data0d=hsmax, category='ice') - call fm%register('albice', '', 'Albedo of ice', standard_name='', data0d=albice, category='ice') - call fm%register('albsnow', '', 'Albedo of snow', standard_name='', data0d=albsnow, category='ice') - call fm%register('meltmass', 'kg m-2', 'melt pond mass per unit area', standard_name='', data0d=meltmass, category='ice') - call fm%register('meltmasso', 'kg m-2', 'melt pond mass per unit area at previous timestep', standard_name='', data0d=meltmasso, category='ice') - call fm%register('pi', '', 'Pi', standard_name='', data0d=pi, category='ice') - -#endif -! yaml vars - call fm%register('nilay', '', 'number of ice layers', category='ice') - call fm%register('sfall_method', '', '1:constant snow fall 2:calculate snowfall from precipitation', category='ice') + !call fm%register('nlmax', '', 'Maximum snow and ice layers',category='ice') +! yaml variables + !call fm%register('nilay', '', 'number of ice layers', category='ice') + !call fm%register('sfall_method', '', '1:constant snow fall 2:calculate snowfall from precipitation', category='ice') call fm%register('const_sfall ', 'm d^-1', 'constant snow fall rate', standard_name='', data0d=const_sfall , category='ice') call fm%register('dfact ', '', 'drift factor allowing a factor to increase snow fall from precipitation via drifing snow', standard_name='', data0d=dfact , category='ice') call fm%register('depmix ', '', 'prescribed mixed layer depth', standard_name='', data0d=depmix , category='ice') - call fm%register('sice_method ', '', ' 1: constant ice salinity 2: Simple ice salinity profile', category='ice') + ! call fm%register('sice_method ', '', ' 1: constant ice salinity 2: Simple ice salinity profile', category='ice') call fm%register('const_Sice', 'ppt','prescribed sea ice salinity', standard_name='', data0d=const_Sice, category='ice') - call fm%register('snow_dist ', '', 'logical switch between uniform and Weibull-distributed snow', category='ice') - call fm%register('distr_type', '', 'integer to chose the type of distribution', category='ice') - call fm%register('meltpond', '', 'If true meltponds are included If false only bare ice is included', category='ice') + ! call fm%register('snow_dist ', '', 'logical switch between uniform and Weibull-distributed snow', category='ice') + !call fm%register('distr_type', '', 'integer to chose the type of distribution', category='ice') + !call fm%register('meltpond', '', 'If true meltponds are included If false only bare ice is included', category='ice') call fm%register('Ameltmax ', '', 'Maximum meltpond area fraction allowed', standard_name='', data0d= Ameltmax , category='ice') call fm%register('drainrate', 'm/d', 'Melt pond drainage rate in ', standard_name='', data0d=drainrate, category='ice') call fm%register('hh0', '', 'initial thickness for S calculation', standard_name='', data0d=hh0, category='ice') call fm%register('ice_hi_i ', '', 'initial ice thickness', standard_name='', data0d=ice_hi_i , category='ice') call fm%register('ice_hs_i ', '', ' initial snow thickness', standard_name='', data0d=ice_hs_i , category='ice') - call fm%register('albice_method ', '', ' albice method', category='ice') + !call fm%register('albice_method ', '', 'albice method', category='ice') call fm%register('albice_f', '', 'ice thickness frazil', standard_name='', data0d= albice_f, category='ice') call fm%register('albmelt', '', 'ice thickness frazil', standard_name='', data0d=albmelt, category='ice') call fm%register('albsnow_f', '', 'ice thickness frazil', standard_name='', data0d=albsnow_f , category='ice') @@ -318,10 +276,6 @@ subroutine register_stim_variables(nlev) call fm%register('swkappaim ', '', 'melting ice extinction coefficient', standard_name='', data0d=swkappaim, category='ice') call fm%register('swkappaif', '', 'freezing ice extinction coefficient', standard_name='', data0d=swkappaif, category='ice') ! -!****************** - - - return end subroutine register_stim_variables From 99e1c84c7ed6faf61b563e63a89c0690c4b2c3b8 Mon Sep 17 00:00:00 2001 From: Julia Putko Date: Fri, 18 Jun 2021 14:47:32 -0700 Subject: [PATCH 03/63] change to register_all_variables and new commits in stim --- src/gotm/register_all_variables.F90 | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/gotm/register_all_variables.F90 b/src/gotm/register_all_variables.F90 index aff16a44..43da2f86 100644 --- a/src/gotm/register_all_variables.F90 +++ b/src/gotm/register_all_variables.F90 @@ -208,6 +208,10 @@ subroutine register_stim_variables(nlev) call fm%register('T1', 'celsius', 'ice temperature (upper)', standard_name='', data0d=Tice(1), category='ice') call fm%register('T2', 'celsius', 'ice temperature (lower)', standard_name='', data0d=Tice(2), category='ice') end if + if (ice_model .eq. 4) then + call fm%register('T1', 'celsius', 'ice temperature (upper)', standard_name='', data0d=Tice(1), category='ice') + call fm%register('T2', 'celsius', 'ice temperature (lower)', standard_name='', data0d=Tice(2), category='ice') + end if call fm%register('Tf', 'celsius', 'ice freezing temperature', standard_name='', data0d=Tf, category='ice') call fm%register('Hice', 'm', 'ice thickness', standard_name='', data0d=Hice, category='ice') call fm%register('surface_ice_energy', 'J/m2', 'ice energy (surface)', standard_name='', data0d=surface_ice_energy, category='ice') From d0aae13d6e49f79845772ae80b11733845b90141 Mon Sep 17 00:00:00 2001 From: Julia Putko Date: Fri, 18 Jun 2021 14:47:57 -0700 Subject: [PATCH 04/63] adding stim commits --- extern/stim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extern/stim b/extern/stim index c24e322a..6f9aee45 160000 --- a/extern/stim +++ b/extern/stim @@ -1 +1 @@ -Subproject commit c24e322a6de5c23f79da52f3e582757064cc2b94 +Subproject commit 6f9aee45cb37837dced711c51e8d5e7119cc8518 From 3fc23e737ab5edbf986ca8b760338c236de20057 Mon Sep 17 00:00:00 2001 From: Julia Putko Date: Tue, 22 Jun 2021 12:03:25 -0700 Subject: [PATCH 05/63] specified vars from stim in use:, excluded some vars from fm%register --- src/gotm/register_all_variables.F90 | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/src/gotm/register_all_variables.F90 b/src/gotm/register_all_variables.F90 index 43da2f86..c320db84 100644 --- a/src/gotm/register_all_variables.F90 +++ b/src/gotm/register_all_variables.F90 @@ -189,8 +189,15 @@ subroutine register_stim_variables(nlev) use stim_variables, only: Tice_surface,Tice,Tf use stim_variables, only: Hice, Hfrazil, dHis, dHib use stim_variables, only: surface_ice_energy,bottom_ice_energy - !use stim_variables, only: ocean_ice_flux - use stim_variables!, only: nilay, sfall_method,const_sfall, dfact , depmix, sice_method, snow_dist, const_Sice, distr_type, meltpond, Ameltmax, drainrate, hh0, ice_hi_i, ice_hs_i, albice_method, albice_f, albmelt, albsnow_f, albice_m, albsnow_m, transsf, transsm, transif, transim, transm, swkappasm, swkappasf, swkappaim, swkappaif + use stim_variables, only: ocean_ice_flux + use stim_variables, only: hsmin, PenFrac, hlaymin + use stim_variables, only: rhoscold, rhoswarm,rhowaterfresh, rhoice + use stim_variables, only: Tmelts, Tmelti, Condfi, rhoCpfi, rCpmix, Hfi, Hfw, swkappa, Tfreezi + use stim_variables, only: const_sfall, dfact, depmix, const_Sice, Ameltmax + use stim_variables, only: drainrate, hh0,ice_hi_i, ice_hs_i + use stim_variables, only: albice_f, albmelt, albsnow_f, albice_m, albsnow_m + use stim_variables, only: transsf, transsm, transif, transim, transm + use stim_variables, only: swkappasm, swkappasf, swkappaim, swkappaif IMPLICIT NONE ! @@ -228,16 +235,16 @@ subroutine register_stim_variables(nlev) !call fm%register('rCpmix', '', 'rCpmix', standard_name='', data0d=rCpmix, category='ice') !call fm%register('Hfi', '', 'Hfi', standard_name='', data0d=Hfi, category='ice') call fm%register('hsmin', 'm', 'minimum snow thickness required for separate snow layer', standard_name='', data0d=hsmin, category='ice') - call fm%register('theta ', '', 'a parameter between 0.5 and 1. which determines how implicit the scheme is', standard_name='', data0d=theta, category='ice') - call fm%register('sigma ', 'W m-2 K-4)', 'Stefan-Boltzmann constant', standard_name='', data0d=sigma, category='ice') - call fm%register('epsilon', 'dimensionless', 'emissivity of ice', standard_name='', data0d=epsilon, category='ice') + !call fm%register('theta ', '', 'a parameter between 0.5 and 1. which determines how implicit the scheme is', standard_name='', data0d=theta, category='ice') + !call fm%register('sigma ', 'W m-2 K-4)', 'Stefan-Boltzmann constant', standard_name='', data0d=sigma, category='ice') + !call fm%register('epsilon', 'dimensionless', 'emissivity of ice', standard_name='', data0d=epsilon, category='ice') call fm%register('PenFrac', '', 'fraction of incoming short wave radiation that penetrates the surface', standard_name='', data0d=PenFrac, category='ice') call fm%register('hlaymin', 'm', 'thickness below which a linear temperature profile is assumed', standard_name='', data0d=hlaymin, category='ice') call fm%register('rhoscold', 'kg m-3', 'specified cold snow density', standard_name='', data0d=rhoscold, category='ice') call fm%register('rhoswarm', 'kg m-3', 'specified warm snow density', standard_name='', data0d=rhoswarm, category='ice') call fm%register('rhowaterfresh', 'kg m-3', 'fresh water density', standard_name='', data0d=rhowaterfresh, category='ice') call fm%register('rhoice', 'kg m-3', 'ice density', standard_name='', data0d=rhoice, category='ice') - call fm%register('kelvin', 'K', 'zero deg Celsius', standard_name='', data0d=kelvin, category='ice') + !call fm%register('kelvin', 'K', 'zero deg Celsius', standard_name='', data0d=kelvin, category='ice') call fm%register('Tmelts', 'K', 'melting temperature of snow (fresh water)', standard_name='', data0d=Tmelts, category='ice') call fm%register('Tmelti', 'K', 'melting temperature of sea ice', standard_name='', data0d=Tmelti, category='ice') call fm%register('Condfi', 'W m-1 K-1', 'conductivity of pure ice', standard_name='', data0d=Condfi, category='ice') From 057c0b935cab380e33b8b1c9268ac1a2bd2da256 Mon Sep 17 00:00:00 2001 From: Julia Putko Date: Mon, 28 Jun 2021 15:31:33 -0700 Subject: [PATCH 06/63] made var in airsea public for use in ice, passing values in calls to subroutines in gotm, initializing the runwintonflato var added in the yaml --- extern/stim | 2 +- src/airsea/airsea.F90 | 3 ++- src/gotm/gotm.F90 | 11 ++++++++--- src/gotm/register_all_variables.F90 | 4 ++-- 4 files changed, 13 insertions(+), 7 deletions(-) diff --git a/extern/stim b/extern/stim index 6f9aee45..c0f5abf7 160000 --- a/extern/stim +++ b/extern/stim @@ -1 +1 @@ -Subproject commit 6f9aee45cb37837dced711c51e8d5e7119cc8518 +Subproject commit c0f5abf722fd6ae4e342faec8398ee6cf0dd2cd9 diff --git a/src/airsea/airsea.F90 b/src/airsea/airsea.F90 index 45b30547..67085686 100644 --- a/src/airsea/airsea.F90 +++ b/src/airsea/airsea.F90 @@ -64,6 +64,7 @@ module airsea_driver ! ! Meteorological forcing variables integer, public :: hum_method + integer, public :: back_radiation_method character(len=PATH_MAX) :: meteo_file type (type_scalar_input), public, target :: u10,v10 type (type_scalar_input), public, target :: airp,airt @@ -262,7 +263,7 @@ subroutine init_airsea_nml(namlst, fn) REALTYPE :: const_tx,const_ty REALTYPE :: const_precip REALTYPE :: precip_factor - integer :: back_radiation_method + !integer :: back_radiation_method jp--> to be used in ice must be declared as public outside of this subroutine. integer :: heat_method namelist /airsea/ calc_fluxes, & diff --git a/src/gotm/gotm.F90 b/src/gotm/gotm.F90 index 5c99e9f7..2d05ed61 100644 --- a/src/gotm/gotm.F90 +++ b/src/gotm/gotm.F90 @@ -52,9 +52,10 @@ module gotm use airsea_driver, only: surface_fluxes use airsea_driver, only: set_sst,set_ssuv,integrated_fluxes use airsea_driver, only: fluxes_method - use airsea_driver, only: wind=>w,tx,ty,I_0,cloud,heat,precip,evap,airp,albedo + use airsea_driver, only: wind=>w,tx,ty,hum,I_0,cloud,heat,precip,evap,airp,albedo use airsea_driver, only: bio_albedo,bio_drag_scale - use airsea_driver, only: u10, v10 + use airsea_driver, only: u10,v10,airt,sst,sss + use airsea_driver, only: back_radiation_method,hum_method,fluxes_method use airsea_variables, only: qa,ta #ifdef _ICE_ @@ -743,7 +744,11 @@ subroutine integrate_gotm() #ifdef _ICE_ Qsw = I_0%value - call do_ice(h(nlev),dt,T(nlev),S(nlev),ta,precip%value,Qsw,surface_fluxes) + call do_ice(h(nlev),dt,T(nlev),S(nlev),ta,precip%value,Qsw, & + surface_fluxes,julianday,secondsofday,longitude, & + latitude,I_0%value,airt%value,airp%value,hum%value, & + u10%value,v10%value,cloud%value,sst,sss%value,rho(nlev),rho_0,back_radiation_method, & + hum_method,fluxes_method,albedo,heat%value) #endif ! reset some quantities diff --git a/src/gotm/register_all_variables.F90 b/src/gotm/register_all_variables.F90 index c320db84..8ed31244 100644 --- a/src/gotm/register_all_variables.F90 +++ b/src/gotm/register_all_variables.F90 @@ -256,8 +256,8 @@ subroutine register_stim_variables(nlev) call fm%register('Tfreezi', 'K', 'freezing temperature of sea water', standard_name='', data0d=Tfreezi , category='ice') !call fm%register('nlmax', '', 'Maximum snow and ice layers',category='ice') ! yaml variables - !call fm%register('nilay', '', 'number of ice layers', category='ice') - !call fm%register('sfall_method', '', '1:constant snow fall 2:calculate snowfall from precipitation', category='ice') + !call fm%register('nilay', '', 'number of ice layers', category='ice') ! com + !call fm%register('sfall_method', '', '1:constant snow fall 2:calculate snowfall from precipitation', category='ice') call fm%register('const_sfall ', 'm d^-1', 'constant snow fall rate', standard_name='', data0d=const_sfall , category='ice') call fm%register('dfact ', '', 'drift factor allowing a factor to increase snow fall from precipitation via drifing snow', standard_name='', data0d=dfact , category='ice') call fm%register('depmix ', '', 'prescribed mixed layer depth', standard_name='', data0d=depmix , category='ice') From 2131e5a1d6c2765659054b94f0cfc80ff12a9cba Mon Sep 17 00:00:00 2001 From: Julia Putko Date: Mon, 28 Jun 2021 16:46:06 -0700 Subject: [PATCH 07/63] adding stim --- extern/stim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extern/stim b/extern/stim index c0f5abf7..0d58e2d4 160000 --- a/extern/stim +++ b/extern/stim @@ -1 +1 @@ -Subproject commit c0f5abf722fd6ae4e342faec8398ee6cf0dd2cd9 +Subproject commit 0d58e2d472f359423ff172412edfc40f722a66c3 From 988c9e26ad52e1ace48d6d1f1902504d713e2f4f Mon Sep 17 00:00:00 2001 From: Julia Putko Date: Tue, 29 Jun 2021 15:31:25 -0700 Subject: [PATCH 08/63] adding stim --- extern/stim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extern/stim b/extern/stim index 0d58e2d4..3ba6332f 160000 --- a/extern/stim +++ b/extern/stim @@ -1 +1 @@ -Subproject commit 0d58e2d472f359423ff172412edfc40f722a66c3 +Subproject commit 3ba6332f58665a0d1f38840a785cd38ddde08ca7 From af7a59e4ea7aab952cf702eedc1f613e8e6e9129 Mon Sep 17 00:00:00 2001 From: Julia Putko Date: Tue, 29 Jun 2021 16:53:59 -0700 Subject: [PATCH 09/63] adding stim --- extern/stim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extern/stim b/extern/stim index 3ba6332f..dc876554 160000 --- a/extern/stim +++ b/extern/stim @@ -1 +1 @@ -Subproject commit 3ba6332f58665a0d1f38840a785cd38ddde08ca7 +Subproject commit dc876554d499f98063fba6b7302c3f8492e0a7be From 09fb79cb1224e24b0a99e9c128ba510e7841dbe8 Mon Sep 17 00:00:00 2001 From: Julia Putko Date: Wed, 30 Jun 2021 10:47:22 -0700 Subject: [PATCH 10/63] adding stim --- extern/stim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extern/stim b/extern/stim index dc876554..7ad9ec1a 160000 --- a/extern/stim +++ b/extern/stim @@ -1 +1 @@ -Subproject commit dc876554d499f98063fba6b7302c3f8492e0a7be +Subproject commit 7ad9ec1a6f5a0e93c1ca32090003a2d061a02a6d From 324e98a8d42f0801197bfaed1cdabb0892bec23e Mon Sep 17 00:00:00 2001 From: Julia Putko Date: Wed, 30 Jun 2021 11:26:38 -0700 Subject: [PATCH 11/63] adding stim --- extern/stim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extern/stim b/extern/stim index 7ad9ec1a..23271344 160000 --- a/extern/stim +++ b/extern/stim @@ -1 +1 @@ -Subproject commit 7ad9ec1a6f5a0e93c1ca32090003a2d061a02a6d +Subproject commit 23271344190d4b9a12c8737a69fdad6e25c3db3c From 46d2b3632d0b9654f4ea8c9703fb091a72718356 Mon Sep 17 00:00:00 2001 From: Julia Putko Date: Wed, 30 Jun 2021 16:58:49 -0700 Subject: [PATCH 12/63] registering vars theta,sigma,kelvin,epsilon --- src/gotm/register_all_variables.F90 | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/gotm/register_all_variables.F90 b/src/gotm/register_all_variables.F90 index 8ed31244..dbe05fb5 100644 --- a/src/gotm/register_all_variables.F90 +++ b/src/gotm/register_all_variables.F90 @@ -198,6 +198,7 @@ subroutine register_stim_variables(nlev) use stim_variables, only: albice_f, albmelt, albsnow_f, albice_m, albsnow_m use stim_variables, only: transsf, transsm, transif, transim, transm use stim_variables, only: swkappasm, swkappasf, swkappaim, swkappaif + use stim_variables, only: epsilon,kelvin,sigma,theta IMPLICIT NONE ! @@ -235,16 +236,16 @@ subroutine register_stim_variables(nlev) !call fm%register('rCpmix', '', 'rCpmix', standard_name='', data0d=rCpmix, category='ice') !call fm%register('Hfi', '', 'Hfi', standard_name='', data0d=Hfi, category='ice') call fm%register('hsmin', 'm', 'minimum snow thickness required for separate snow layer', standard_name='', data0d=hsmin, category='ice') - !call fm%register('theta ', '', 'a parameter between 0.5 and 1. which determines how implicit the scheme is', standard_name='', data0d=theta, category='ice') - !call fm%register('sigma ', 'W m-2 K-4)', 'Stefan-Boltzmann constant', standard_name='', data0d=sigma, category='ice') - !call fm%register('epsilon', 'dimensionless', 'emissivity of ice', standard_name='', data0d=epsilon, category='ice') + call fm%register('theta ', '', 'a parameter between 0.5 and 1. which determines how implicit the scheme is', standard_name='', data0d=theta, category='ice') + call fm%register('sigma ', 'W m-2 K-4)', 'Stefan-Boltzmann constant', standard_name='', data0d=sigma, category='ice') + call fm%register('epsilon', 'dimensionless', 'emissivity of ice', standard_name='', data0d=epsilon, category='ice') call fm%register('PenFrac', '', 'fraction of incoming short wave radiation that penetrates the surface', standard_name='', data0d=PenFrac, category='ice') call fm%register('hlaymin', 'm', 'thickness below which a linear temperature profile is assumed', standard_name='', data0d=hlaymin, category='ice') call fm%register('rhoscold', 'kg m-3', 'specified cold snow density', standard_name='', data0d=rhoscold, category='ice') call fm%register('rhoswarm', 'kg m-3', 'specified warm snow density', standard_name='', data0d=rhoswarm, category='ice') call fm%register('rhowaterfresh', 'kg m-3', 'fresh water density', standard_name='', data0d=rhowaterfresh, category='ice') call fm%register('rhoice', 'kg m-3', 'ice density', standard_name='', data0d=rhoice, category='ice') - !call fm%register('kelvin', 'K', 'zero deg Celsius', standard_name='', data0d=kelvin, category='ice') + call fm%register('kelvin', 'K', 'zero deg Celsius', standard_name='', data0d=kelvin, category='ice') call fm%register('Tmelts', 'K', 'melting temperature of snow (fresh water)', standard_name='', data0d=Tmelts, category='ice') call fm%register('Tmelti', 'K', 'melting temperature of sea ice', standard_name='', data0d=Tmelti, category='ice') call fm%register('Condfi', 'W m-1 K-1', 'conductivity of pure ice', standard_name='', data0d=Condfi, category='ice') From d918eb082b0c9a6f275aa5daccb0b9d0c4c71da6 Mon Sep 17 00:00:00 2001 From: Julia Putko Date: Wed, 30 Jun 2021 17:04:33 -0700 Subject: [PATCH 13/63] adding stim --- extern/stim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extern/stim b/extern/stim index 23271344..fbfd52cd 160000 --- a/extern/stim +++ b/extern/stim @@ -1 +1 @@ -Subproject commit 23271344190d4b9a12c8737a69fdad6e25c3db3c +Subproject commit fbfd52cdc350c3ff8f8a78aa20978e84d4999a3c From 709d1e52b40274ea13d561485bad152a7155ba02 Mon Sep 17 00:00:00 2001 From: Julia Putko Date: Thu, 1 Jul 2021 14:01:15 -0700 Subject: [PATCH 14/63] param passing more consistent with oldcode --- extern/stim | 2 +- src/gotm/gotm.F90 | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/extern/stim b/extern/stim index fbfd52cd..13940d26 160000 --- a/extern/stim +++ b/extern/stim @@ -1 +1 @@ -Subproject commit fbfd52cdc350c3ff8f8a78aa20978e84d4999a3c +Subproject commit 13940d26750fa36475b483f32553bee95e9b1828 diff --git a/src/gotm/gotm.F90 b/src/gotm/gotm.F90 index 2d05ed61..5e6ba3b2 100644 --- a/src/gotm/gotm.F90 +++ b/src/gotm/gotm.F90 @@ -747,7 +747,7 @@ subroutine integrate_gotm() call do_ice(h(nlev),dt,T(nlev),S(nlev),ta,precip%value,Qsw, & surface_fluxes,julianday,secondsofday,longitude, & latitude,I_0%value,airt%value,airp%value,hum%value, & - u10%value,v10%value,cloud%value,sst,sss%value,rho(nlev),rho_0,back_radiation_method, & + u10%value,v10%value,cloud%value,rho(nlev),rho_0,back_radiation_method, & !sst,sss%value, hum_method,fluxes_method,albedo,heat%value) #endif From b5b0fbeba8a22b1a4fe4dbcda3326448560de1f1 Mon Sep 17 00:00:00 2001 From: Julia Putko Date: Thu, 1 Jul 2021 17:56:24 -0700 Subject: [PATCH 15/63] adding stim --- extern/stim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extern/stim b/extern/stim index 13940d26..6274046e 160000 --- a/extern/stim +++ b/extern/stim @@ -1 +1 @@ -Subproject commit 13940d26750fa36475b483f32553bee95e9b1828 +Subproject commit 6274046ea1b0088b218e706cda44a0ba0f7d48ec From 2f171943d936b96e33fb9eaa0709a8b84c2e7c8e Mon Sep 17 00:00:00 2001 From: Julia Putko Date: Mon, 5 Jul 2021 11:21:43 -0700 Subject: [PATCH 16/63] adding stim --- extern/stim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extern/stim b/extern/stim index 6274046e..f2d76d74 160000 --- a/extern/stim +++ b/extern/stim @@ -1 +1 @@ -Subproject commit 6274046ea1b0088b218e706cda44a0ba0f7d48ec +Subproject commit f2d76d74f6e51903b0f3428979ca1e960b39ad13 From 712c77232d5ee632486c37396dcfbac08b840728 Mon Sep 17 00:00:00 2001 From: Julia Putko Date: Mon, 5 Jul 2021 16:52:13 -0700 Subject: [PATCH 17/63] changes to resolve longwave_radiation_method value passing error --- extern/stim | 2 +- src/airsea/airsea.F90 | 3 +-- src/gotm/gotm.F90 | 4 ++-- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/extern/stim b/extern/stim index f2d76d74..adae8024 160000 --- a/extern/stim +++ b/extern/stim @@ -1 +1 @@ -Subproject commit f2d76d74f6e51903b0f3428979ca1e960b39ad13 +Subproject commit adae8024f27a5786bdaae7565b7fb773e415db4d diff --git a/src/airsea/airsea.F90 b/src/airsea/airsea.F90 index 67085686..1468b148 100644 --- a/src/airsea/airsea.F90 +++ b/src/airsea/airsea.F90 @@ -64,7 +64,6 @@ module airsea_driver ! ! Meteorological forcing variables integer, public :: hum_method - integer, public :: back_radiation_method character(len=PATH_MAX) :: meteo_file type (type_scalar_input), public, target :: u10,v10 type (type_scalar_input), public, target :: airp,airt @@ -263,7 +262,7 @@ subroutine init_airsea_nml(namlst, fn) REALTYPE :: const_tx,const_ty REALTYPE :: const_precip REALTYPE :: precip_factor - !integer :: back_radiation_method jp--> to be used in ice must be declared as public outside of this subroutine. + integer :: back_radiation_method integer :: heat_method namelist /airsea/ calc_fluxes, & diff --git a/src/gotm/gotm.F90 b/src/gotm/gotm.F90 index 5e6ba3b2..700c9519 100644 --- a/src/gotm/gotm.F90 +++ b/src/gotm/gotm.F90 @@ -55,7 +55,7 @@ module gotm use airsea_driver, only: wind=>w,tx,ty,hum,I_0,cloud,heat,precip,evap,airp,albedo use airsea_driver, only: bio_albedo,bio_drag_scale use airsea_driver, only: u10,v10,airt,sst,sss - use airsea_driver, only: back_radiation_method,hum_method,fluxes_method + use airsea_driver, only: ql,hum_method,fluxes_method use airsea_variables, only: qa,ta #ifdef _ICE_ @@ -747,7 +747,7 @@ subroutine integrate_gotm() call do_ice(h(nlev),dt,T(nlev),S(nlev),ta,precip%value,Qsw, & surface_fluxes,julianday,secondsofday,longitude, & latitude,I_0%value,airt%value,airp%value,hum%value, & - u10%value,v10%value,cloud%value,rho(nlev),rho_0,back_radiation_method, & !sst,sss%value, + u10%value,v10%value,cloud%value,rho(nlev),rho_0,ql%method, & !sst,sss%value, !ql%method == longwave_radiation_method hum_method,fluxes_method,albedo,heat%value) #endif From cba9d0f06b98f1659fe282605764c3edc9b061b7 Mon Sep 17 00:00:00 2001 From: Julia Putko Date: Wed, 7 Jul 2021 17:00:20 -0700 Subject: [PATCH 18/63] adding stim --- extern/stim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extern/stim b/extern/stim index adae8024..b76aec8f 160000 --- a/extern/stim +++ b/extern/stim @@ -1 +1 @@ -Subproject commit adae8024f27a5786bdaae7565b7fb773e415db4d +Subproject commit b76aec8fbaae98bae66267ab5c194a8878869d8a From babdc5d6421bee62ee75c2cbc941cb2f1dfbcc8e Mon Sep 17 00:00:00 2001 From: Julia Putko Date: Thu, 8 Jul 2021 09:42:58 -0700 Subject: [PATCH 19/63] adding stim --- extern/stim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extern/stim b/extern/stim index b76aec8f..fdebbbc7 160000 --- a/extern/stim +++ b/extern/stim @@ -1 +1 @@ -Subproject commit b76aec8fbaae98bae66267ab5c194a8878869d8a +Subproject commit fdebbbc7507d87c53e8073ec7427f084f63a6846 From 7109c593b45f6abc934b1269486b1bbb320b5e28 Mon Sep 17 00:00:00 2001 From: Julia Putko Date: Mon, 12 Jul 2021 17:28:29 -0700 Subject: [PATCH 20/63] adding stim and added and removed vars from register_all_variables so that output file is consistent with mortenson --- extern/stim | 2 +- src/gotm/register_all_variables.F90 | 82 +++++++++++++++++++++++++---- 2 files changed, 72 insertions(+), 12 deletions(-) diff --git a/extern/stim b/extern/stim index fdebbbc7..4bf6e70c 160000 --- a/extern/stim +++ b/extern/stim @@ -1 +1 @@ -Subproject commit fdebbbc7507d87c53e8073ec7427f084f63a6846 +Subproject commit 4bf6e70ca0714d23a93f79799fc2ad7131e11e0f diff --git a/src/gotm/register_all_variables.F90 b/src/gotm/register_all_variables.F90 index dbe05fb5..5e0f129a 100644 --- a/src/gotm/register_all_variables.F90 +++ b/src/gotm/register_all_variables.F90 @@ -189,16 +189,24 @@ subroutine register_stim_variables(nlev) use stim_variables, only: Tice_surface,Tice,Tf use stim_variables, only: Hice, Hfrazil, dHis, dHib use stim_variables, only: surface_ice_energy,bottom_ice_energy + + use stim_variables, only: ice_hi,ice_hs,ice_uvic_hm,ice_uvic_ts,ice_uvic_tb,ice_uvic_swr_0,ice_uvic_precip_i,ice_uvic_sfall_i,ice_uvic_parb,ice_uvic_parui + use stim_variables, only: ice_uvic_Fh,ice_uvic_Fs,ice_uvic_Ff,ice_uvic_Sicebulk + use stim_variables, only: ice_uvic_topmelt,ice_uvic_botmelt,ice_uvic_termelt,ice_uvic_topgrowth,ice_uvic_botgrowth + use stim_variables, only: ice_uvic_Hmix,ice_uvic_Aice,ice_uvic_asnow,ice_uvic_Amelt,ice_uvic_dzi,ice_uvic_Cond,ice_uvic_rhoCp,ice_uvic_zi,ice_uvic_Tice,ice_uvic_Sint,ice_uvic_Pari + use stim_variables, only: nilay use stim_variables, only: ocean_ice_flux - use stim_variables, only: hsmin, PenFrac, hlaymin - use stim_variables, only: rhoscold, rhoswarm,rhowaterfresh, rhoice - use stim_variables, only: Tmelts, Tmelti, Condfi, rhoCpfi, rCpmix, Hfi, Hfw, swkappa, Tfreezi - use stim_variables, only: const_sfall, dfact, depmix, const_Sice, Ameltmax - use stim_variables, only: drainrate, hh0,ice_hi_i, ice_hs_i - use stim_variables, only: albice_f, albmelt, albsnow_f, albice_m, albsnow_m - use stim_variables, only: transsf, transsm, transif, transim, transm - use stim_variables, only: swkappasm, swkappasf, swkappaim, swkappaif - use stim_variables, only: epsilon,kelvin,sigma,theta + ! use stim_variables, only: hsmin, PenFrac, hlaymin + !use stim_variables, only: rhoscold, rhoswarm,rhowaterfresh, rhoice + ! use stim_variables, only: Tmelts, Tmelti, Condfi, rhoCpfi, rCpmix, Hfi, Hfw, swkappa, Tfreezi + ! use stim_variables, only: const_sfall, dfact, depmix, const_Sice, Ameltmax + !use stim_variables, only: drainrate, hh0,ice_hi_i, ice_hs_i + !use stim_variables, only: albice_f, albmelt, albsnow_f, albice_m, albsnow_m + !use stim_variables, only: transsf, transsm, transif, transim, transm + !use stim_variables, only: swkappasm, swkappasf, swkappaim, swkappaif + !use stim_variables, only: epsilon,kelvin,sigma,theta + + use stim_flato, only: simass,snmass,meltmass,qb IMPLICIT NONE ! @@ -229,12 +237,63 @@ subroutine register_stim_variables(nlev) call fm%register('dHis', 'm', 'ice growth (surface)', standard_name='', data0d=dHis, category='ice') call fm%register('dHib', 'm', 'ice growth (bottom)', standard_name='', data0d=dHib, category='ice') !Flato + +!Vars from ice_uvic + call fm%register('qb', 'W/m2', 'long wave back-radiation', standard_name='', data0d=qb, category='ice') + ! qh, qe already being registered in airsea + !call fm%register('qe', 'W/m2', 'sensible heat', standard_name='', data0d=qe, category='ice') + !call fm%register('qh', 'W/m2', 'latent heat', standard_name='', data0d=qh, category='ice') + call fm%register('simass', 'kg/m2"', 'Ice mass per area', standard_name='', data0d=simass, category='ice') + call fm%register('snmass', 'kg/m2', 'Snow mass per area', standard_name='', data0d=snmass, category='ice') + call fm%register('meltmass', 'kg/m2', 'meltpond mass per area"', standard_name='', data0d=meltmass, category='ice') + +!public vars from ice.F90 + call fm%register('ice_hi', 'm', 'Ice thickness', standard_name='', data0d=ice_hi, category='ice') + call fm%register('ice_hs', 'm', 'Snow thickness', standard_name='', data0d=ice_hs, category='ice') + call fm%register('ice_hm', 'm', 'Meltpond thickness', standard_name='', data0d=ice_uvic_hm, category='ice') + call fm%register('ice_ts', 'K', 'ice/snow surface temperature', standard_name='', data0d=ice_uvic_ts, category='ice') + call fm%register('ice_tb', 'K', 'lowest ice layer temperature', standard_name='', data0d=ice_uvic_tb, category='ice') + call fm%register('swr_0', 'W/m^2', 'incidental shortwave radiation', standard_name='', data0d=ice_uvic_swr_0, category='ice') + call fm%register('precip_i', 'm/s', 'precipitation rate', standard_name='', data0d=ice_uvic_precip_i, category='ice') + call fm%register('sfall_i', 'm/s', 'snowfall rate', standard_name='', data0d=ice_uvic_sfall_i, category='ice') + call fm%register('ice_parb', 'W/m^2', 'lowest ice layer PAR', standard_name='', data0d=ice_uvic_parb, category='ice') + call fm%register('ice_parui', 'W/m^2', 'under ice PAR', standard_name='', data0d=ice_uvic_parui, category='ice') + call fm%register('Fh', 'W/m2', 'Heat flux at the interface', standard_name='', data0d=ice_uvic_fh, category='ice') + call fm%register('Fs', 'ppt m/s', 'Salt flux at the interface', standard_name='', data0d=ice_uvic_Fs, category='ice') + call fm%register('Ff', 'm/s', 'Freshwater flux at the interface', standard_name='', data0d=ice_uvic_Ff, category='ice') + call fm%register('Sice_bulk', 'ppt', 'Bulk sea ice salinity', standard_name='', data0d=ice_uvic_Sicebulk, category='ice') + call fm%register('topmelt', 'W/m2', 'Surface ice melt', standard_name='', data0d=ice_uvic_topmelt, category='ice') + call fm%register('botmelt', 'W/m2', 'Bottom ice melt', standard_name='', data0d=ice_uvic_botmelt, category='ice') + call fm%register('termelt', 'W/m2', 'Internal ice melt', standard_name='', data0d=ice_uvic_termelt, category='ice') + call fm%register('topgrowth', '', 'Surface ice growth (via submersion)', standard_name='', data0d=ice_uvic_topgrowth, category='ice') + call fm%register('botgrowth', '', 'Bottom ice growth', standard_name='', data0d=ice_uvic_botgrowth, category='ice') + call fm%register('Hmix', '', 'mixed layer heat storage', standard_name='', data0d=ice_uvic_Hmix, category='ice') + call fm%register('Aice', '', 'fraction of ice area that is bare ice', standard_name='', data0d=ice_uvic_Aice, category='ice') + call fm%register('Asnow', '', 'fraction of ice area that is snow covered', standard_name='', data0d=ice_uvic_Asnow, category='ice') + call fm%register('Amelt', '', 'fraction of ice area that is melt pond', standard_name='', data0d=ice_uvic_Amelt, category='ice') + !call fm%register('h', '', '', standard_name='', data0d=, category='ice') + + !nilay or nlev? ??jpnote + call fm%register('ice_zi', 'm', 'Ice interface depth', standard_name='', data0d=ice_uvic_zi(nilay+1), category='ice') !??? + call fm%register('dzi', 'm', 'Ice layer thickness', standard_name='', data0d=ice_uvic_dzi(nilay), category='ice') + call fm%register('Cond', 'W m-1 kg-1', 'Ice conductivity', standard_name='',data0d=ice_uvic_Cond(nilay), category='ice') + call fm%register('rhoCp', '10^6 J m-3 K-1', 'volum heat capacity', standard_name='', data0d=ice_uvic_rhoCp(nilay), category='ice') + + !Causing error for now jpnote + !call fm%register('Tice', 'Celsius', 'Ice slab temperature', standard_name='',dimensions=(/id_dim_z/), data1d=ice_uvic_Tice(2:nilay+2), category='ice') + !call fm%register('Sint', 'W m-3', 'Ice SW internal heat', standard_name='',dimensions=(/id_dim_z/),data0d=ice_uvic_Sint(nilay+1), category='ice') + !call fm%register('Pari', 'W m-2', 'PAR radiation in ice', standard_name='',dimensions=(/id_dim_z/), data0d=ice_uvic_Pari(nilay+1), category='ice') + !-------------------------------------------------------------------------------------- +#if 0 ! public vars !call fm%register('hlaymin', '', 'hlaymin', standard_name='', data0d=hlaymin, category='ice') !call fm%register('rhoice', '', 'rhoice', standard_name='', data0d=rhoice, category='ice') !call fm%register('Tfreezi', '', 'Tfreezi', standard_name='', data0d=Tfreezi, category='ice') !call fm%register('rCpmix', '', 'rCpmix', standard_name='', data0d=rCpmix, category='ice') !call fm%register('Hfi', '', 'Hfi', standard_name='', data0d=Hfi, category='ice') + + +! NOT registered for output in mortenson2017 call fm%register('hsmin', 'm', 'minimum snow thickness required for separate snow layer', standard_name='', data0d=hsmin, category='ice') call fm%register('theta ', '', 'a parameter between 0.5 and 1. which determines how implicit the scheme is', standard_name='', data0d=theta, category='ice') call fm%register('sigma ', 'W m-2 K-4)', 'Stefan-Boltzmann constant', standard_name='', data0d=sigma, category='ice') @@ -256,7 +315,8 @@ subroutine register_stim_variables(nlev) call fm%register('swkappa', 'm-1', 'bulk short-wave extinction coefficient', standard_name='', data0d=swkappa , category='ice') call fm%register('Tfreezi', 'K', 'freezing temperature of sea water', standard_name='', data0d=Tfreezi , category='ice') !call fm%register('nlmax', '', 'Maximum snow and ice layers',category='ice') -! yaml variables + + ! yaml variables !call fm%register('nilay', '', 'number of ice layers', category='ice') ! com !call fm%register('sfall_method', '', '1:constant snow fall 2:calculate snowfall from precipitation', category='ice') call fm%register('const_sfall ', 'm d^-1', 'constant snow fall rate', standard_name='', data0d=const_sfall , category='ice') @@ -288,7 +348,7 @@ subroutine register_stim_variables(nlev) call fm%register('swkappaim ', '', 'melting ice extinction coefficient', standard_name='', data0d=swkappaim, category='ice') call fm%register('swkappaif', '', 'freezing ice extinction coefficient', standard_name='', data0d=swkappaif, category='ice') ! - +#endif return end subroutine register_stim_variables !EOC From 6f099c9d453f5508cb448e84735253389305a8d6 Mon Sep 17 00:00:00 2001 From: Julia Putko Date: Thu, 15 Jul 2021 16:51:41 -0700 Subject: [PATCH 21/63] added new dimension --- extern/flexout | 2 +- extern/stim | 2 +- src/gotm/gotm.F90 | 5 +++-- src/gotm/register_all_variables.F90 | 6 +++--- 4 files changed, 8 insertions(+), 7 deletions(-) diff --git a/extern/flexout b/extern/flexout index ff01d274..a8c7e6e6 160000 --- a/extern/flexout +++ b/extern/flexout @@ -1 +1 @@ -Subproject commit ff01d2747564635eede8fe2943464b66d01b0b17 +Subproject commit a8c7e6e6162e7f91a49dd86bcb2b7fb03813bc2e diff --git a/extern/stim b/extern/stim index 4bf6e70c..d9e56178 160000 --- a/extern/stim +++ b/extern/stim @@ -1 +1 @@ -Subproject commit 4bf6e70ca0714d23a93f79799fc2ad7131e11e0f +Subproject commit d9e5617824e8dba26acc37ec398974a7af21f5e1 diff --git a/src/gotm/gotm.F90 b/src/gotm/gotm.F90 index 700c9519..e7bed064 100644 --- a/src/gotm/gotm.F90 +++ b/src/gotm/gotm.F90 @@ -60,7 +60,7 @@ module gotm #ifdef _ICE_ use ice, only: init_ice, post_init_ice, do_ice, clean_ice, ice_cover - use stim_variables, only: Tice_surface,albedo_ice,transmissivity + use stim_variables, only: Tice_surface,albedo_ice,transmissivity, nilay #endif use turbulence, only: turb_method @@ -413,6 +413,7 @@ subroutine initialize_gotm() call fm%register_dimension('lat',1,id=id_dim_lat) call fm%register_dimension('z',nlev,id=id_dim_z) call fm%register_dimension('zi',nlev+1,id=id_dim_zi) + call fm%register_dimension('zice',nilay+1,id=id_dim_zice) !jpnote call fm%register_dimension('time',id=id_dim_time) call fm%initialize(prepend_by_default=(/id_dim_lon,id_dim_lat/),append_by_default=(/id_dim_time/)) @@ -744,7 +745,7 @@ subroutine integrate_gotm() #ifdef _ICE_ Qsw = I_0%value - call do_ice(h(nlev),dt,T(nlev),S(nlev),ta,precip%value,Qsw, & + call do_ice(h(nlev),dt,T(nlev),S(nlev),ta,precip%value,Qsw, & !h -- sum of dz ,, T -- temp of water !make sure arrays are not shaped for water surface_fluxes,julianday,secondsofday,longitude, & latitude,I_0%value,airt%value,airp%value,hum%value, & u10%value,v10%value,cloud%value,rho(nlev),rho_0,ql%method, & !sst,sss%value, !ql%method == longwave_radiation_method diff --git a/src/gotm/register_all_variables.F90 b/src/gotm/register_all_variables.F90 index 5e0f129a..8e8579ce 100644 --- a/src/gotm/register_all_variables.F90 +++ b/src/gotm/register_all_variables.F90 @@ -280,9 +280,9 @@ subroutine register_stim_variables(nlev) call fm%register('rhoCp', '10^6 J m-3 K-1', 'volum heat capacity', standard_name='', data0d=ice_uvic_rhoCp(nilay), category='ice') !Causing error for now jpnote - !call fm%register('Tice', 'Celsius', 'Ice slab temperature', standard_name='',dimensions=(/id_dim_z/), data1d=ice_uvic_Tice(2:nilay+2), category='ice') - !call fm%register('Sint', 'W m-3', 'Ice SW internal heat', standard_name='',dimensions=(/id_dim_z/),data0d=ice_uvic_Sint(nilay+1), category='ice') - !call fm%register('Pari', 'W m-2', 'PAR radiation in ice', standard_name='',dimensions=(/id_dim_z/), data0d=ice_uvic_Pari(nilay+1), category='ice') + call fm%register('Tice', 'Celsius', 'Ice slab temperature', standard_name='',dimensions=(/id_dim_zice/), data1d=ice_uvic_Tice(0:nilay), category='ice') + call fm%register('Sint', 'W m-3', 'Ice SW internal heat', standard_name='',dimensions=(/id_dim_zice/),data1d=ice_uvic_Sint(1:nilay+1), category='ice') + call fm%register('Pari', 'W m-2', 'PAR radiation in ice', standard_name='',dimensions=(/id_dim_zice/), data1d=ice_uvic_Pari(1:nilay+1), category='ice') !-------------------------------------------------------------------------------------- #if 0 ! public vars From 2f08c134c43268f76f747feac67ceec41d85ddab Mon Sep 17 00:00:00 2001 From: Julia Putko Date: Mon, 19 Jul 2021 17:15:58 -0700 Subject: [PATCH 22/63] info for dimensions, addition to salinity is commented, if uncommente, simulation runs without kb error --- extern/flexout | 2 +- extern/stim | 2 +- src/gotm/gotm.F90 | 4 +++- src/gotm/register_all_variables.F90 | 19 ++++++++++++------- src/meanflow/salinity.F90 | 3 +++ 5 files changed, 20 insertions(+), 10 deletions(-) diff --git a/extern/flexout b/extern/flexout index a8c7e6e6..e4d09145 160000 --- a/extern/flexout +++ b/extern/flexout @@ -1 +1 @@ -Subproject commit a8c7e6e6162e7f91a49dd86bcb2b7fb03813bc2e +Subproject commit e4d09145ed71638b343015b38277ad11cb5a42ba diff --git a/extern/stim b/extern/stim index d9e56178..48ae7609 160000 --- a/extern/stim +++ b/extern/stim @@ -1 +1 @@ -Subproject commit d9e5617824e8dba26acc37ec398974a7af21f5e1 +Subproject commit 48ae7609ac0e59d1cf256a970c9fac3ca0dd75b4 diff --git a/src/gotm/gotm.F90 b/src/gotm/gotm.F90 index e7bed064..fda2c402 100644 --- a/src/gotm/gotm.F90 +++ b/src/gotm/gotm.F90 @@ -60,7 +60,7 @@ module gotm #ifdef _ICE_ use ice, only: init_ice, post_init_ice, do_ice, clean_ice, ice_cover - use stim_variables, only: Tice_surface,albedo_ice,transmissivity, nilay + use stim_variables, only: Tice_surface,albedo_ice,transmissivity,nilay,ice_uvic_Tice #endif use turbulence, only: turb_method @@ -413,7 +413,9 @@ subroutine initialize_gotm() call fm%register_dimension('lat',1,id=id_dim_lat) call fm%register_dimension('z',nlev,id=id_dim_z) call fm%register_dimension('zi',nlev+1,id=id_dim_zi) + call fm%register_dimension('z1',nilay,id=id_dim_z1) call fm%register_dimension('zice',nilay+1,id=id_dim_zice) !jpnote + call fm%register_dimension('dzice',nilay,id=id_dim_dzice) !jpnote call fm%register_dimension('time',id=id_dim_time) call fm%initialize(prepend_by_default=(/id_dim_lon,id_dim_lat/),append_by_default=(/id_dim_time/)) diff --git a/src/gotm/register_all_variables.F90 b/src/gotm/register_all_variables.F90 index 8e8579ce..85944d24 100644 --- a/src/gotm/register_all_variables.F90 +++ b/src/gotm/register_all_variables.F90 @@ -193,7 +193,7 @@ subroutine register_stim_variables(nlev) use stim_variables, only: ice_hi,ice_hs,ice_uvic_hm,ice_uvic_ts,ice_uvic_tb,ice_uvic_swr_0,ice_uvic_precip_i,ice_uvic_sfall_i,ice_uvic_parb,ice_uvic_parui use stim_variables, only: ice_uvic_Fh,ice_uvic_Fs,ice_uvic_Ff,ice_uvic_Sicebulk use stim_variables, only: ice_uvic_topmelt,ice_uvic_botmelt,ice_uvic_termelt,ice_uvic_topgrowth,ice_uvic_botgrowth - use stim_variables, only: ice_uvic_Hmix,ice_uvic_Aice,ice_uvic_asnow,ice_uvic_Amelt,ice_uvic_dzi,ice_uvic_Cond,ice_uvic_rhoCp,ice_uvic_zi,ice_uvic_Tice,ice_uvic_Sint,ice_uvic_Pari + use stim_variables, only: ice_uvic_Hmix,ice_uvic_Aice,ice_uvic_asnow,ice_uvic_Amelt,ice_uvic_dzi,ice_uvic_Cond,ice_uvic_rhoCp,ice_uvic_zi,ice_uvic_zice,ice_uvic_dzice,ice_uvic_Tice,ice_uvic_Sint,ice_uvic_Pari use stim_variables, only: nilay use stim_variables, only: ocean_ice_flux ! use stim_variables, only: hsmin, PenFrac, hlaymin @@ -273,14 +273,19 @@ subroutine register_stim_variables(nlev) call fm%register('Amelt', '', 'fraction of ice area that is melt pond', standard_name='', data0d=ice_uvic_Amelt, category='ice') !call fm%register('h', '', '', standard_name='', data0d=, category='ice') - !nilay or nlev? ??jpnote + !---------------------------- jpnote call fm%register('ice_zi', 'm', 'Ice interface depth', standard_name='', data0d=ice_uvic_zi(nilay+1), category='ice') !??? - call fm%register('dzi', 'm', 'Ice layer thickness', standard_name='', data0d=ice_uvic_dzi(nilay), category='ice') - call fm%register('Cond', 'W m-1 kg-1', 'Ice conductivity', standard_name='',data0d=ice_uvic_Cond(nilay), category='ice') - call fm%register('rhoCp', '10^6 J m-3 K-1', 'volum heat capacity', standard_name='', data0d=ice_uvic_rhoCp(nilay), category='ice') + call fm%register('ice_dzi', 'm', 'Ice interface depth', standard_name='', data0d=ice_uvic_dzi(nilay), category='ice') + call fm%register('ice_zice', 'layers', 'zice', standard_name='', data0d=ice_uvic_zice(nilay+1), category='ice') + call fm%register('ice_dzice', 'layer', 'dzice', standard_name='', data0d=ice_uvic_dzice(nilay), category='ice') + + !-------------------------- + + call fm%register('dzi', 'm', 'Ice layer thickness', standard_name='', dimensions=(/id_dim_dzice/), data1d=ice_uvic_dzi(1:nilay), category='ice') - !Causing error for now jpnote - call fm%register('Tice', 'Celsius', 'Ice slab temperature', standard_name='',dimensions=(/id_dim_zice/), data1d=ice_uvic_Tice(0:nilay), category='ice') + call fm%register('Cond', 'W m-1 kg-1', 'Ice conductivity', standard_name='',dimensions=(/id_dim_dzice/),data1d=ice_uvic_Cond(1:nilay), category='ice') + call fm%register('rhoCp', '10^6 J m-3 K-1', 'volum heat capacity', standard_name='',dimensions=(/id_dim_dzice/), data1d=ice_uvic_rhoCp(1:nilay), category='ice') + call fm%register('Tice', 'Celsius', 'Ice slab temperature', standard_name='',dimensions=(/id_dim_zice/), data1d=ice_uvic_Tice(2:nilay+2), category='ice') ! jpnote: changed range so that it matched the mortenson output call fm%register('Sint', 'W m-3', 'Ice SW internal heat', standard_name='',dimensions=(/id_dim_zice/),data1d=ice_uvic_Sint(1:nilay+1), category='ice') call fm%register('Pari', 'W m-2', 'PAR radiation in ice', standard_name='',dimensions=(/id_dim_zice/), data1d=ice_uvic_Pari(1:nilay+1), category='ice') !-------------------------------------------------------------------------------------- diff --git a/src/meanflow/salinity.F90 b/src/meanflow/salinity.F90 index 09a88082..327af880 100644 --- a/src/meanflow/salinity.F90 +++ b/src/meanflow/salinity.F90 @@ -111,6 +111,9 @@ subroutine salinity(nlev,dt,cnpar,nus,gams) ! set boundary conditions DiffBcup = Neumann DiffBcdw = Neumann + !----------------- jp added : uncomment for test + !precip%value = 0.0 !jpnote precip reset -- resolves kb error (not reading precip_EC.dat file correctly? ) + !------------------ DiffSup = -S(nlev)*(precip%value+evap) DiffSdw = _ZERO_ From 78af89a8d9d3599a2e9f93301bde0944a154dfbb Mon Sep 17 00:00:00 2001 From: Julia Putko Date: Thu, 22 Jul 2021 14:55:07 -0700 Subject: [PATCH 23/63] adding flexout and stim,, removing z1,, update to Tice upper and lower bounds in register_all_variables --- extern/flexout | 2 +- extern/stim | 2 +- src/gotm/gotm.F90 | 2 +- src/gotm/register_all_variables.F90 | 14 ++++++++------ 4 files changed, 11 insertions(+), 9 deletions(-) diff --git a/extern/flexout b/extern/flexout index e4d09145..274133ea 160000 --- a/extern/flexout +++ b/extern/flexout @@ -1 +1 @@ -Subproject commit e4d09145ed71638b343015b38277ad11cb5a42ba +Subproject commit 274133ea7c52a8e4a67fbe4f0791b6ad98cc4a79 diff --git a/extern/stim b/extern/stim index 48ae7609..d8f7de59 160000 --- a/extern/stim +++ b/extern/stim @@ -1 +1 @@ -Subproject commit 48ae7609ac0e59d1cf256a970c9fac3ca0dd75b4 +Subproject commit d8f7de59fc4515cc1b7435bf287ccdad52269dc0 diff --git a/src/gotm/gotm.F90 b/src/gotm/gotm.F90 index fda2c402..1d00231d 100644 --- a/src/gotm/gotm.F90 +++ b/src/gotm/gotm.F90 @@ -413,7 +413,7 @@ subroutine initialize_gotm() call fm%register_dimension('lat',1,id=id_dim_lat) call fm%register_dimension('z',nlev,id=id_dim_z) call fm%register_dimension('zi',nlev+1,id=id_dim_zi) - call fm%register_dimension('z1',nilay,id=id_dim_z1) + ! call fm%register_dimension('z1',nilay,id=id_dim_z1) !jpnote commented call fm%register_dimension('zice',nilay+1,id=id_dim_zice) !jpnote call fm%register_dimension('dzice',nilay,id=id_dim_dzice) !jpnote call fm%register_dimension('time',id=id_dim_time) diff --git a/src/gotm/register_all_variables.F90 b/src/gotm/register_all_variables.F90 index 85944d24..83f8212b 100644 --- a/src/gotm/register_all_variables.F90 +++ b/src/gotm/register_all_variables.F90 @@ -239,10 +239,12 @@ subroutine register_stim_variables(nlev) !Flato !Vars from ice_uvic - call fm%register('qb', 'W/m2', 'long wave back-radiation', standard_name='', data0d=qb, category='ice') + ! call fm%register('qb', 'W/m2', 'long wave back-radiation', standard_name='', data0d=qb, category='ice') ! qh, qe already being registered in airsea !call fm%register('qe', 'W/m2', 'sensible heat', standard_name='', data0d=qe, category='ice') !call fm%register('qh', 'W/m2', 'latent heat', standard_name='', data0d=qh, category='ice') + !are the vals the same as ql,qe,qh in aisea .. need to reeval something? + call fm%register('simass', 'kg/m2"', 'Ice mass per area', standard_name='', data0d=simass, category='ice') call fm%register('snmass', 'kg/m2', 'Snow mass per area', standard_name='', data0d=snmass, category='ice') call fm%register('meltmass', 'kg/m2', 'meltpond mass per area"', standard_name='', data0d=meltmass, category='ice') @@ -274,10 +276,10 @@ subroutine register_stim_variables(nlev) !call fm%register('h', '', '', standard_name='', data0d=, category='ice') !---------------------------- jpnote - call fm%register('ice_zi', 'm', 'Ice interface depth', standard_name='', data0d=ice_uvic_zi(nilay+1), category='ice') !??? - call fm%register('ice_dzi', 'm', 'Ice interface depth', standard_name='', data0d=ice_uvic_dzi(nilay), category='ice') - call fm%register('ice_zice', 'layers', 'zice', standard_name='', data0d=ice_uvic_zice(nilay+1), category='ice') - call fm%register('ice_dzice', 'layer', 'dzice', standard_name='', data0d=ice_uvic_dzice(nilay), category='ice') + ! call fm%register('ice_zi', 'm', 'Ice interface depth', standard_name='', data0d=ice_uvic_zi(nilay+1), category='ice') !??? + ! call fm%register('ice_dzi', 'm', 'Ice layer thickness', standard_name='', data0d=ice_uvic_dzi(nilay), category='ice') + ! call fm%register('ice_zice', 'layers', 'zice', standard_name='', data0d=ice_uvic_zice(nilay+1), category='ice') + ! call fm%register('ice_dzice', 'layer', 'dzice', standard_name='', data0d=ice_uvic_dzice(nilay), category='ice') !-------------------------- @@ -285,7 +287,7 @@ subroutine register_stim_variables(nlev) call fm%register('Cond', 'W m-1 kg-1', 'Ice conductivity', standard_name='',dimensions=(/id_dim_dzice/),data1d=ice_uvic_Cond(1:nilay), category='ice') call fm%register('rhoCp', '10^6 J m-3 K-1', 'volum heat capacity', standard_name='',dimensions=(/id_dim_dzice/), data1d=ice_uvic_rhoCp(1:nilay), category='ice') - call fm%register('Tice', 'Celsius', 'Ice slab temperature', standard_name='',dimensions=(/id_dim_zice/), data1d=ice_uvic_Tice(2:nilay+2), category='ice') ! jpnote: changed range so that it matched the mortenson output + call fm%register('Tice', 'Celsius', 'Ice slab temperature', standard_name='',dimensions=(/id_dim_zice/), data1d=ice_uvic_Tice(1:nilay+1), category='ice') ! jpnote: changed range so that it matched the mortenson output call fm%register('Sint', 'W m-3', 'Ice SW internal heat', standard_name='',dimensions=(/id_dim_zice/),data1d=ice_uvic_Sint(1:nilay+1), category='ice') call fm%register('Pari', 'W m-2', 'PAR radiation in ice', standard_name='',dimensions=(/id_dim_zice/), data1d=ice_uvic_Pari(1:nilay+1), category='ice') !-------------------------------------------------------------------------------------- From d93c90e236ba5b5cc62fba348c0140923b1d3796 Mon Sep 17 00:00:00 2001 From: Julia Putko Date: Fri, 23 Jul 2021 17:46:35 -0700 Subject: [PATCH 24/63] adding stim --- extern/stim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extern/stim b/extern/stim index d8f7de59..4ac9187b 160000 --- a/extern/stim +++ b/extern/stim @@ -1 +1 @@ -Subproject commit d8f7de59fc4515cc1b7435bf287ccdad52269dc0 +Subproject commit 4ac9187beb01fd8a52a76a74b1946794b40281fd From 7e959de40030cfe62d4f98eb4922edacd02ab722 Mon Sep 17 00:00:00 2001 From: Julia Putko Date: Fri, 23 Jul 2021 17:55:03 -0700 Subject: [PATCH 25/63] cleaned up --- src/gotm/register_all_variables.F90 | 105 ++-------------------------- 1 file changed, 7 insertions(+), 98 deletions(-) diff --git a/src/gotm/register_all_variables.F90 b/src/gotm/register_all_variables.F90 index 83f8212b..0dd22a45 100644 --- a/src/gotm/register_all_variables.F90 +++ b/src/gotm/register_all_variables.F90 @@ -196,15 +196,7 @@ subroutine register_stim_variables(nlev) use stim_variables, only: ice_uvic_Hmix,ice_uvic_Aice,ice_uvic_asnow,ice_uvic_Amelt,ice_uvic_dzi,ice_uvic_Cond,ice_uvic_rhoCp,ice_uvic_zi,ice_uvic_zice,ice_uvic_dzice,ice_uvic_Tice,ice_uvic_Sint,ice_uvic_Pari use stim_variables, only: nilay use stim_variables, only: ocean_ice_flux - ! use stim_variables, only: hsmin, PenFrac, hlaymin - !use stim_variables, only: rhoscold, rhoswarm,rhowaterfresh, rhoice - ! use stim_variables, only: Tmelts, Tmelti, Condfi, rhoCpfi, rCpmix, Hfi, Hfw, swkappa, Tfreezi - ! use stim_variables, only: const_sfall, dfact, depmix, const_Sice, Ameltmax - !use stim_variables, only: drainrate, hh0,ice_hi_i, ice_hs_i - !use stim_variables, only: albice_f, albmelt, albsnow_f, albice_m, albsnow_m - !use stim_variables, only: transsf, transsm, transif, transim, transm - !use stim_variables, only: swkappasm, swkappasf, swkappaim, swkappaif - !use stim_variables, only: epsilon,kelvin,sigma,theta + use stim_flato, only: simass,snmass,meltmass,qb @@ -236,19 +228,12 @@ subroutine register_stim_variables(nlev) call fm%register('Hfrazil', 'm', 'ice thickness (frazil)', standard_name='', data0d=Hfrazil, category='ice') call fm%register('dHis', 'm', 'ice growth (surface)', standard_name='', data0d=dHis, category='ice') call fm%register('dHib', 'm', 'ice growth (bottom)', standard_name='', data0d=dHib, category='ice') - !Flato - -!Vars from ice_uvic - ! call fm%register('qb', 'W/m2', 'long wave back-radiation', standard_name='', data0d=qb, category='ice') - ! qh, qe already being registered in airsea - !call fm%register('qe', 'W/m2', 'sensible heat', standard_name='', data0d=qe, category='ice') - !call fm%register('qh', 'W/m2', 'latent heat', standard_name='', data0d=qh, category='ice') - !are the vals the same as ql,qe,qh in aisea .. need to reeval something? - + +!Flato +!Vars from ice_uvic.F90 call fm%register('simass', 'kg/m2"', 'Ice mass per area', standard_name='', data0d=simass, category='ice') call fm%register('snmass', 'kg/m2', 'Snow mass per area', standard_name='', data0d=snmass, category='ice') call fm%register('meltmass', 'kg/m2', 'meltpond mass per area"', standard_name='', data0d=meltmass, category='ice') - !public vars from ice.F90 call fm%register('ice_hi', 'm', 'Ice thickness', standard_name='', data0d=ice_hi, category='ice') call fm%register('ice_hs', 'm', 'Snow thickness', standard_name='', data0d=ice_hs, category='ice') @@ -272,90 +257,14 @@ subroutine register_stim_variables(nlev) call fm%register('Hmix', '', 'mixed layer heat storage', standard_name='', data0d=ice_uvic_Hmix, category='ice') call fm%register('Aice', '', 'fraction of ice area that is bare ice', standard_name='', data0d=ice_uvic_Aice, category='ice') call fm%register('Asnow', '', 'fraction of ice area that is snow covered', standard_name='', data0d=ice_uvic_Asnow, category='ice') - call fm%register('Amelt', '', 'fraction of ice area that is melt pond', standard_name='', data0d=ice_uvic_Amelt, category='ice') - !call fm%register('h', '', '', standard_name='', data0d=, category='ice') - - !---------------------------- jpnote - ! call fm%register('ice_zi', 'm', 'Ice interface depth', standard_name='', data0d=ice_uvic_zi(nilay+1), category='ice') !??? - ! call fm%register('ice_dzi', 'm', 'Ice layer thickness', standard_name='', data0d=ice_uvic_dzi(nilay), category='ice') - ! call fm%register('ice_zice', 'layers', 'zice', standard_name='', data0d=ice_uvic_zice(nilay+1), category='ice') - ! call fm%register('ice_dzice', 'layer', 'dzice', standard_name='', data0d=ice_uvic_dzice(nilay), category='ice') - - !-------------------------- - + call fm%register('Amelt', '', 'fraction of ice area that is melt pond', standard_name='', data0d=ice_uvic_Amelt, category='ice') call fm%register('dzi', 'm', 'Ice layer thickness', standard_name='', dimensions=(/id_dim_dzice/), data1d=ice_uvic_dzi(1:nilay), category='ice') - call fm%register('Cond', 'W m-1 kg-1', 'Ice conductivity', standard_name='',dimensions=(/id_dim_dzice/),data1d=ice_uvic_Cond(1:nilay), category='ice') call fm%register('rhoCp', '10^6 J m-3 K-1', 'volum heat capacity', standard_name='',dimensions=(/id_dim_dzice/), data1d=ice_uvic_rhoCp(1:nilay), category='ice') - call fm%register('Tice', 'Celsius', 'Ice slab temperature', standard_name='',dimensions=(/id_dim_zice/), data1d=ice_uvic_Tice(1:nilay+1), category='ice') ! jpnote: changed range so that it matched the mortenson output + call fm%register('Tice', 'Celsius', 'Ice slab temperature', standard_name='',dimensions=(/id_dim_zice/), data1d=ice_uvic_Tice(1:nilay+1), category='ice') call fm%register('Sint', 'W m-3', 'Ice SW internal heat', standard_name='',dimensions=(/id_dim_zice/),data1d=ice_uvic_Sint(1:nilay+1), category='ice') call fm%register('Pari', 'W m-2', 'PAR radiation in ice', standard_name='',dimensions=(/id_dim_zice/), data1d=ice_uvic_Pari(1:nilay+1), category='ice') - !-------------------------------------------------------------------------------------- -#if 0 -! public vars - !call fm%register('hlaymin', '', 'hlaymin', standard_name='', data0d=hlaymin, category='ice') - !call fm%register('rhoice', '', 'rhoice', standard_name='', data0d=rhoice, category='ice') - !call fm%register('Tfreezi', '', 'Tfreezi', standard_name='', data0d=Tfreezi, category='ice') - !call fm%register('rCpmix', '', 'rCpmix', standard_name='', data0d=rCpmix, category='ice') - !call fm%register('Hfi', '', 'Hfi', standard_name='', data0d=Hfi, category='ice') - - -! NOT registered for output in mortenson2017 - call fm%register('hsmin', 'm', 'minimum snow thickness required for separate snow layer', standard_name='', data0d=hsmin, category='ice') - call fm%register('theta ', '', 'a parameter between 0.5 and 1. which determines how implicit the scheme is', standard_name='', data0d=theta, category='ice') - call fm%register('sigma ', 'W m-2 K-4)', 'Stefan-Boltzmann constant', standard_name='', data0d=sigma, category='ice') - call fm%register('epsilon', 'dimensionless', 'emissivity of ice', standard_name='', data0d=epsilon, category='ice') - call fm%register('PenFrac', '', 'fraction of incoming short wave radiation that penetrates the surface', standard_name='', data0d=PenFrac, category='ice') - call fm%register('hlaymin', 'm', 'thickness below which a linear temperature profile is assumed', standard_name='', data0d=hlaymin, category='ice') - call fm%register('rhoscold', 'kg m-3', 'specified cold snow density', standard_name='', data0d=rhoscold, category='ice') - call fm%register('rhoswarm', 'kg m-3', 'specified warm snow density', standard_name='', data0d=rhoswarm, category='ice') - call fm%register('rhowaterfresh', 'kg m-3', 'fresh water density', standard_name='', data0d=rhowaterfresh, category='ice') - call fm%register('rhoice', 'kg m-3', 'ice density', standard_name='', data0d=rhoice, category='ice') - call fm%register('kelvin', 'K', 'zero deg Celsius', standard_name='', data0d=kelvin, category='ice') - call fm%register('Tmelts', 'K', 'melting temperature of snow (fresh water)', standard_name='', data0d=Tmelts, category='ice') - call fm%register('Tmelti', 'K', 'melting temperature of sea ice', standard_name='', data0d=Tmelti, category='ice') - call fm%register('Condfi', 'W m-1 K-1', 'conductivity of pure ice', standard_name='', data0d=Condfi, category='ice') - call fm%register('rhoCpfi', 'J m-3 K-1', 'heat capacity of pure ice', standard_name='', data0d=rhoCpfi, category='ice') - call fm%register('rCpmix', 'J m-3 K-1', 'volumetric heat capacity of sea water ', standard_name='', data0d=rCpmix, category='ice') - call fm%register('Hfi', 'J kg-1', 'latent heat of fusion of sea ice ', standard_name='', data0d=Hfi , category='ice') - call fm%register('Hfw', 'J kg-1', 'latent heat of fusion of fresh water', standard_name='', data0d=Hfw, category='ice') - call fm%register('swkappa', 'm-1', 'bulk short-wave extinction coefficient', standard_name='', data0d=swkappa , category='ice') - call fm%register('Tfreezi', 'K', 'freezing temperature of sea water', standard_name='', data0d=Tfreezi , category='ice') - !call fm%register('nlmax', '', 'Maximum snow and ice layers',category='ice') - - ! yaml variables - !call fm%register('nilay', '', 'number of ice layers', category='ice') ! com - !call fm%register('sfall_method', '', '1:constant snow fall 2:calculate snowfall from precipitation', category='ice') - call fm%register('const_sfall ', 'm d^-1', 'constant snow fall rate', standard_name='', data0d=const_sfall , category='ice') - call fm%register('dfact ', '', 'drift factor allowing a factor to increase snow fall from precipitation via drifing snow', standard_name='', data0d=dfact , category='ice') - call fm%register('depmix ', '', 'prescribed mixed layer depth', standard_name='', data0d=depmix , category='ice') - ! call fm%register('sice_method ', '', ' 1: constant ice salinity 2: Simple ice salinity profile', category='ice') - call fm%register('const_Sice', 'ppt','prescribed sea ice salinity', standard_name='', data0d=const_Sice, category='ice') - ! call fm%register('snow_dist ', '', 'logical switch between uniform and Weibull-distributed snow', category='ice') - !call fm%register('distr_type', '', 'integer to chose the type of distribution', category='ice') - !call fm%register('meltpond', '', 'If true meltponds are included If false only bare ice is included', category='ice') - call fm%register('Ameltmax ', '', 'Maximum meltpond area fraction allowed', standard_name='', data0d= Ameltmax , category='ice') - call fm%register('drainrate', 'm/d', 'Melt pond drainage rate in ', standard_name='', data0d=drainrate, category='ice') - call fm%register('hh0', '', 'initial thickness for S calculation', standard_name='', data0d=hh0, category='ice') - call fm%register('ice_hi_i ', '', 'initial ice thickness', standard_name='', data0d=ice_hi_i , category='ice') - call fm%register('ice_hs_i ', '', ' initial snow thickness', standard_name='', data0d=ice_hs_i , category='ice') - !call fm%register('albice_method ', '', 'albice method', category='ice') - call fm%register('albice_f', '', 'ice thickness frazil', standard_name='', data0d= albice_f, category='ice') - call fm%register('albmelt', '', 'ice thickness frazil', standard_name='', data0d=albmelt, category='ice') - call fm%register('albsnow_f', '', 'ice thickness frazil', standard_name='', data0d=albsnow_f , category='ice') - call fm%register('albice_m ', '', 'melting ice albedo', standard_name='', data0d=albice_m , category='ice') - call fm%register('albsnow_m', '', 'melting snow albedo', standard_name='', data0d= albsnow_m, category='ice') - call fm%register('transsf', '', 'freezing snow transmission coefficient', standard_name='', data0d=transsf, category='ice') - call fm%register('transsm ', '', 'melting snow transmission coefficient', standard_name='', data0d=transsm, category='ice') - call fm%register('transif ', '', 'freezing ice transmission coefficient', standard_name='', data0d=transif, category='ice') - call fm%register('transim ', '', 'melting ice transmission coefficient', standard_name='', data0d=transim, category='ice') - call fm%register('transm', '', 'melt pond transmision coefficient', standard_name='', data0d=transm, category='ice') - call fm%register('swkappasm', '', 'melting snow extinction coefficient', standard_name='', data0d=swkappasm, category='ice') - call fm%register('swkappasf ', '', 'freezing snow extinction coefficient', standard_name='', data0d=swkappasf, category='ice') - call fm%register('swkappaim ', '', 'melting ice extinction coefficient', standard_name='', data0d=swkappaim, category='ice') - call fm%register('swkappaif', '', 'freezing ice extinction coefficient', standard_name='', data0d=swkappaif, category='ice') -! -#endif + return end subroutine register_stim_variables !EOC From c22dbd7a76ab4e0ca8ad4cf0d71f69b28223cea7 Mon Sep 17 00:00:00 2001 From: Julia Putko Date: Tue, 27 Jul 2021 12:08:56 -0700 Subject: [PATCH 26/63] changing bounds in register_all_variables --- extern/stim | 2 +- src/gotm/register_all_variables.F90 | 16 ++++++++++------ 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/extern/stim b/extern/stim index 4ac9187b..8dc19d9f 160000 --- a/extern/stim +++ b/extern/stim @@ -1 +1 @@ -Subproject commit 4ac9187beb01fd8a52a76a74b1946794b40281fd +Subproject commit 8dc19d9f00bd82ce7fc1b6982a80dba71ddc9132 diff --git a/src/gotm/register_all_variables.F90 b/src/gotm/register_all_variables.F90 index 0dd22a45..eb6c8850 100644 --- a/src/gotm/register_all_variables.F90 +++ b/src/gotm/register_all_variables.F90 @@ -258,12 +258,16 @@ subroutine register_stim_variables(nlev) call fm%register('Aice', '', 'fraction of ice area that is bare ice', standard_name='', data0d=ice_uvic_Aice, category='ice') call fm%register('Asnow', '', 'fraction of ice area that is snow covered', standard_name='', data0d=ice_uvic_Asnow, category='ice') call fm%register('Amelt', '', 'fraction of ice area that is melt pond', standard_name='', data0d=ice_uvic_Amelt, category='ice') - call fm%register('dzi', 'm', 'Ice layer thickness', standard_name='', dimensions=(/id_dim_dzice/), data1d=ice_uvic_dzi(1:nilay), category='ice') - call fm%register('Cond', 'W m-1 kg-1', 'Ice conductivity', standard_name='',dimensions=(/id_dim_dzice/),data1d=ice_uvic_Cond(1:nilay), category='ice') - call fm%register('rhoCp', '10^6 J m-3 K-1', 'volum heat capacity', standard_name='',dimensions=(/id_dim_dzice/), data1d=ice_uvic_rhoCp(1:nilay), category='ice') - call fm%register('Tice', 'Celsius', 'Ice slab temperature', standard_name='',dimensions=(/id_dim_zice/), data1d=ice_uvic_Tice(1:nilay+1), category='ice') - call fm%register('Sint', 'W m-3', 'Ice SW internal heat', standard_name='',dimensions=(/id_dim_zice/),data1d=ice_uvic_Sint(1:nilay+1), category='ice') - call fm%register('Pari', 'W m-2', 'PAR radiation in ice', standard_name='',dimensions=(/id_dim_zice/), data1d=ice_uvic_Pari(1:nilay+1), category='ice') + + call fm%register('dzi', 'm', 'Ice layer thickness', standard_name='', dimensions=(/id_dim_dzice/), data1d=ice_uvic_dzi(2:nilay+1), category='ice') !changed from 1:nilay to 2:nilay+1 + + call fm%register('ice_uvic_zi', 'm', 'interface depth', standard_name='', dimensions=(/id_dim_dzice/), data1d=ice_uvic_zi(1:nilay), category='ice') !zi in old code .. zi in new code is from meanflow and gives different vals -- + + call fm%register('Cond', 'W m-1 kg-1', 'Ice conductivity', standard_name='',dimensions=(/id_dim_dzice/),data1d=ice_uvic_Cond(1:nilay), category='ice') !undo + call fm%register('rhoCp', '10^6 J m-3 K-1', 'volum heat capacity', standard_name='',dimensions=(/id_dim_dzice/), data1d=ice_uvic_rhoCp(2:nilay+1), category='ice') !keep - from 1:nilay to 2:nilay+1 + call fm%register('Tice', 'Celsius', 'Ice slab temperature', standard_name='',dimensions=(/id_dim_zice/), data1d=ice_uvic_Tice(2:nilay+2), category='ice') !changing from 1:nilay+1 to 2:nilay+2 + call fm%register('Sint', 'W m-3', 'Ice SW internal heat', standard_name='',dimensions=(/id_dim_zice/),data1d=ice_uvic_Sint(2:nilay+2), category='ice') !from 1:nilay+1 to 2:nilay+2 + call fm%register('Pari', 'W m-2', 'PAR radiation in ice', standard_name='',dimensions=(/id_dim_zice/), data1d=ice_uvic_Pari(2:nilay+2), category='ice') !keep - changing from 1:nilay+1 to 2:nilay+2 return end subroutine register_stim_variables From 70723e80d7fe189f5338be66ca5112df7d877d3a Mon Sep 17 00:00:00 2001 From: Patrick Farnole Date: Tue, 27 Jul 2021 13:16:58 -0700 Subject: [PATCH 27/63] writing Cond on the right indexes --- src/gotm/register_all_variables.F90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gotm/register_all_variables.F90 b/src/gotm/register_all_variables.F90 index eb6c8850..57718f4c 100644 --- a/src/gotm/register_all_variables.F90 +++ b/src/gotm/register_all_variables.F90 @@ -263,7 +263,7 @@ subroutine register_stim_variables(nlev) call fm%register('ice_uvic_zi', 'm', 'interface depth', standard_name='', dimensions=(/id_dim_dzice/), data1d=ice_uvic_zi(1:nilay), category='ice') !zi in old code .. zi in new code is from meanflow and gives different vals -- - call fm%register('Cond', 'W m-1 kg-1', 'Ice conductivity', standard_name='',dimensions=(/id_dim_dzice/),data1d=ice_uvic_Cond(1:nilay), category='ice') !undo + call fm%register('Cond', 'W m-1 kg-1', 'Ice conductivity', standard_name='',dimensions=(/id_dim_dzice/),data1d=ice_uvic_Cond(2:nilay+1), category='ice') !undo call fm%register('rhoCp', '10^6 J m-3 K-1', 'volum heat capacity', standard_name='',dimensions=(/id_dim_dzice/), data1d=ice_uvic_rhoCp(2:nilay+1), category='ice') !keep - from 1:nilay to 2:nilay+1 call fm%register('Tice', 'Celsius', 'Ice slab temperature', standard_name='',dimensions=(/id_dim_zice/), data1d=ice_uvic_Tice(2:nilay+2), category='ice') !changing from 1:nilay+1 to 2:nilay+2 call fm%register('Sint', 'W m-3', 'Ice SW internal heat', standard_name='',dimensions=(/id_dim_zice/),data1d=ice_uvic_Sint(2:nilay+2), category='ice') !from 1:nilay+1 to 2:nilay+2 From 097493eade254ace1aa61700568fdabf5aea18e2 Mon Sep 17 00:00:00 2001 From: Julia Putko Date: Wed, 28 Jul 2021 12:16:25 -0700 Subject: [PATCH 28/63] changed dimensions of ice_uvic_zi, added zice and dzice --- src/gotm/register_all_variables.F90 | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/gotm/register_all_variables.F90 b/src/gotm/register_all_variables.F90 index 57718f4c..ad4aff76 100644 --- a/src/gotm/register_all_variables.F90 +++ b/src/gotm/register_all_variables.F90 @@ -261,8 +261,11 @@ subroutine register_stim_variables(nlev) call fm%register('dzi', 'm', 'Ice layer thickness', standard_name='', dimensions=(/id_dim_dzice/), data1d=ice_uvic_dzi(2:nilay+1), category='ice') !changed from 1:nilay to 2:nilay+1 - call fm%register('ice_uvic_zi', 'm', 'interface depth', standard_name='', dimensions=(/id_dim_dzice/), data1d=ice_uvic_zi(1:nilay), category='ice') !zi in old code .. zi in new code is from meanflow and gives different vals -- + call fm%register('ice_uvic_zi', 'm', 'interface depth', standard_name='', dimensions=(/id_dim_zice/), data1d=ice_uvic_zi(1:nilay+1), category='ice') !zi in old code .. zi in new code is from meanflow and gives different vals -- + call fm%register('zice', 'm', 'interface depth', standard_name='', dimensions=(/id_dim_zice/),data1d=ice_uvic_zice(1:nilay+1), category='ice') + call fm%register('dzice', 'm', 'interface depth', standard_name='', dimensions=(/id_dim_dzice/), data1d=ice_uvic_dzice(1:nilay), category='ice') + call fm%register('Cond', 'W m-1 kg-1', 'Ice conductivity', standard_name='',dimensions=(/id_dim_dzice/),data1d=ice_uvic_Cond(2:nilay+1), category='ice') !undo call fm%register('rhoCp', '10^6 J m-3 K-1', 'volum heat capacity', standard_name='',dimensions=(/id_dim_dzice/), data1d=ice_uvic_rhoCp(2:nilay+1), category='ice') !keep - from 1:nilay to 2:nilay+1 call fm%register('Tice', 'Celsius', 'Ice slab temperature', standard_name='',dimensions=(/id_dim_zice/), data1d=ice_uvic_Tice(2:nilay+2), category='ice') !changing from 1:nilay+1 to 2:nilay+2 From 7eb476592ccae183e4f1eb1e6161e66c4c9862f2 Mon Sep 17 00:00:00 2001 From: Julia Putko Date: Wed, 28 Jul 2021 14:08:08 -0700 Subject: [PATCH 29/63] adding stim --- extern/stim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extern/stim b/extern/stim index 8dc19d9f..be265097 160000 --- a/extern/stim +++ b/extern/stim @@ -1 +1 @@ -Subproject commit 8dc19d9f00bd82ce7fc1b6982a80dba71ddc9132 +Subproject commit be265097ac419e71217c446dfa4bc609b110ebee From 74f8ad75376e7fed1a9b47a06686304f98982c7e Mon Sep 17 00:00:00 2001 From: Julia Putko Date: Thu, 29 Jul 2021 13:43:15 -0700 Subject: [PATCH 30/63] fixed problem with ice_uvic_zi --- src/gotm/register_all_variables.F90 | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/gotm/register_all_variables.F90 b/src/gotm/register_all_variables.F90 index ad4aff76..bb1d6e9a 100644 --- a/src/gotm/register_all_variables.F90 +++ b/src/gotm/register_all_variables.F90 @@ -261,16 +261,16 @@ subroutine register_stim_variables(nlev) call fm%register('dzi', 'm', 'Ice layer thickness', standard_name='', dimensions=(/id_dim_dzice/), data1d=ice_uvic_dzi(2:nilay+1), category='ice') !changed from 1:nilay to 2:nilay+1 - call fm%register('ice_uvic_zi', 'm', 'interface depth', standard_name='', dimensions=(/id_dim_zice/), data1d=ice_uvic_zi(1:nilay+1), category='ice') !zi in old code .. zi in new code is from meanflow and gives different vals -- + call fm%register('ice_uvic_zi', 'm', 'interface depth', standard_name='', dimensions=(/id_dim_zice/), data1d=ice_uvic_zi(2:nilay+2), category='ice') ! zi in old code corresponds to ice_uvic_zi in new code call fm%register('zice', 'm', 'interface depth', standard_name='', dimensions=(/id_dim_zice/),data1d=ice_uvic_zice(1:nilay+1), category='ice') call fm%register('dzice', 'm', 'interface depth', standard_name='', dimensions=(/id_dim_dzice/), data1d=ice_uvic_dzice(1:nilay), category='ice') - call fm%register('Cond', 'W m-1 kg-1', 'Ice conductivity', standard_name='',dimensions=(/id_dim_dzice/),data1d=ice_uvic_Cond(2:nilay+1), category='ice') !undo - call fm%register('rhoCp', '10^6 J m-3 K-1', 'volum heat capacity', standard_name='',dimensions=(/id_dim_dzice/), data1d=ice_uvic_rhoCp(2:nilay+1), category='ice') !keep - from 1:nilay to 2:nilay+1 - call fm%register('Tice', 'Celsius', 'Ice slab temperature', standard_name='',dimensions=(/id_dim_zice/), data1d=ice_uvic_Tice(2:nilay+2), category='ice') !changing from 1:nilay+1 to 2:nilay+2 - call fm%register('Sint', 'W m-3', 'Ice SW internal heat', standard_name='',dimensions=(/id_dim_zice/),data1d=ice_uvic_Sint(2:nilay+2), category='ice') !from 1:nilay+1 to 2:nilay+2 - call fm%register('Pari', 'W m-2', 'PAR radiation in ice', standard_name='',dimensions=(/id_dim_zice/), data1d=ice_uvic_Pari(2:nilay+2), category='ice') !keep - changing from 1:nilay+1 to 2:nilay+2 + call fm%register('Cond', 'W m-1 kg-1', 'Ice conductivity', standard_name='',dimensions=(/id_dim_dzice/),data1d=ice_uvic_Cond(2:nilay+1), category='ice') + call fm%register('rhoCp', '10^6 J m-3 K-1', 'volum heat capacity', standard_name='',dimensions=(/id_dim_dzice/), data1d=ice_uvic_rhoCp(2:nilay+1), category='ice') + call fm%register('Tice', 'Celsius', 'Ice slab temperature', standard_name='',dimensions=(/id_dim_zice/), data1d=ice_uvic_Tice(2:nilay+2), category='ice') + call fm%register('Sint', 'W m-3', 'Ice SW internal heat', standard_name='',dimensions=(/id_dim_zice/),data1d=ice_uvic_Sint(2:nilay+2), category='ice') + call fm%register('Pari', 'W m-2', 'PAR radiation in ice', standard_name='',dimensions=(/id_dim_zice/), data1d=ice_uvic_Pari(2:nilay+2), category='ice') return end subroutine register_stim_variables From 968c623f6710e6f3d2a6cea4de5dfc5a0e6e0dff Mon Sep 17 00:00:00 2001 From: Julia Putko Date: Fri, 30 Jul 2021 12:44:19 -0700 Subject: [PATCH 31/63] adding stim --- extern/stim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extern/stim b/extern/stim index be265097..fe0735ce 160000 --- a/extern/stim +++ b/extern/stim @@ -1 +1 @@ -Subproject commit be265097ac419e71217c446dfa4bc609b110ebee +Subproject commit fe0735ce55d96eafb9bc2d8b4063cc804dc72cde From c93919b069af693b8574de5de410a05ecfa777f2 Mon Sep 17 00:00:00 2001 From: Julia Putko Date: Tue, 3 Aug 2021 17:23:43 -0700 Subject: [PATCH 32/63] changed in salinity --- src/gotm/gotm.F90 | 20 ++++++++++++++++++-- src/meanflow/salinity.F90 | 15 ++++++++++----- 2 files changed, 28 insertions(+), 7 deletions(-) diff --git a/src/gotm/gotm.F90 b/src/gotm/gotm.F90 index 1d00231d..26136dac 100644 --- a/src/gotm/gotm.F90 +++ b/src/gotm/gotm.F90 @@ -60,7 +60,9 @@ module gotm #ifdef _ICE_ use ice, only: init_ice, post_init_ice, do_ice, clean_ice, ice_cover - use stim_variables, only: Tice_surface,albedo_ice,transmissivity,nilay,ice_uvic_Tice + use stim_variables, only: Tice_surface,albedo_ice,transmissivity,nilay,ice_uvic_Tice + use stim_variables, only: ice_hs,ice_hi,ice_uvic_topmelt,ice_uvic_topgrowth,ice_uvic_termelt,ice_uvic_botmelt,ice_uvic_botgrowth,ice_uvic_tb,ice_uvic_ts + use stim_variables, only: ice_uvic_Fs,ice_uvic_Ff,ice_uvic_parb,ice_uvic_parui,ice_uvic_Amelt #endif use turbulence, only: turb_method @@ -414,8 +416,11 @@ subroutine initialize_gotm() call fm%register_dimension('z',nlev,id=id_dim_z) call fm%register_dimension('zi',nlev+1,id=id_dim_zi) ! call fm%register_dimension('z1',nilay,id=id_dim_z1) !jpnote commented +#ifdef _ICE_ +!when compiling with stim off we dont have access to stim variables call fm%register_dimension('zice',nilay+1,id=id_dim_zice) !jpnote call fm%register_dimension('dzice',nilay,id=id_dim_dzice) !jpnote +#endif call fm%register_dimension('time',id=id_dim_time) call fm%initialize(prepend_by_default=(/id_dim_lon,id_dim_lat/),append_by_default=(/id_dim_time/)) @@ -688,6 +693,9 @@ subroutine integrate_gotm() !EOP ! ! !LOCAL VARIABLES: + + ! integer :: np !jpnote + integer(kind=timestepkind):: n integer :: i=0 @@ -747,11 +755,19 @@ subroutine integrate_gotm() #ifdef _ICE_ Qsw = I_0%value + + !np = ubound(S,1) call do_ice(h(nlev),dt,T(nlev),S(nlev),ta,precip%value,Qsw, & !h -- sum of dz ,, T -- temp of water !make sure arrays are not shaped for water surface_fluxes,julianday,secondsofday,longitude, & latitude,I_0%value,airt%value,airp%value,hum%value, & u10%value,v10%value,cloud%value,rho(nlev),rho_0,ql%method, & !sst,sss%value, !ql%method == longwave_radiation_method hum_method,fluxes_method,albedo,heat%value) + + !call do_ice(h(np),dt,T(np),S(np),ta,precip%value,Qsw, & !h -- sum of dz ,, T -- temp of water !make sure arrays are not shaped for water + ! surface_fluxes,julianday,secondsofday,longitude, & + ! latitude,I_0%value,airt%value,airp%value,hum%value, & + ! u10%value,v10%value,cloud%value,rho(np),rho_0,ql%method, & !sst,sss%value, !ql%method == longwave_radiation_method + ! hum_method,fluxes_method,albedo,heat%value) #endif ! reset some quantities @@ -789,7 +805,7 @@ subroutine integrate_gotm() ! update temperature and salinity if (sprof%method .ne. 0) then - call salinity(nlev,dt,cnpar,nus,gams) + call salinity(nlev,dt,cnpar,nus,gams,ice_uvic_Fs,ice_uvic_Ff) !jpnote passing ice_uvic_fs and ice_uvic_ff from ice endif if (tprof%method .ne. 0) then diff --git a/src/meanflow/salinity.F90 b/src/meanflow/salinity.F90 index 327af880..c1db14f1 100644 --- a/src/meanflow/salinity.F90 +++ b/src/meanflow/salinity.F90 @@ -5,7 +5,7 @@ ! !ROUTINE: The salinity equation \label{sec:salinity} ! ! !INTERFACE: - subroutine salinity(nlev,dt,cnpar,nus,gams) + subroutine salinity(nlev,dt,cnpar,nus,gams,Fs,Ff) !jpnote passing in Fs and Ff from ice ! ! !DESCRIPTION: ! This subroutine computes the balance of salinity in the form @@ -89,6 +89,11 @@ subroutine salinity(nlev,dt,cnpar,nus,gams) ! non-local salinity flux (psu m/s) REALTYPE, intent(in) :: gams(0:nlev) ! +! +! ice-ocean interaction salt and freshwater fluxes + REALTYPE, intent(in) :: Fs,Ff !jpnote added + +! ! !REVISION HISTORY: ! Original author(s): Hans Burchard & Karsten Bolding ! @@ -111,10 +116,10 @@ subroutine salinity(nlev,dt,cnpar,nus,gams) ! set boundary conditions DiffBcup = Neumann DiffBcdw = Neumann - !----------------- jp added : uncomment for test - !precip%value = 0.0 !jpnote precip reset -- resolves kb error (not reading precip_EC.dat file correctly? ) - !------------------ - DiffSup = -S(nlev)*(precip%value+evap) + !DiffSup = -S(nlev)*(precip%value+evap) !jpnote commenting + + DiffSup = -S(nlev)*(precip%value+evap+Ff)-Fs ! jpnote adding equation used in old code !need to pass in ff and fs for this + DiffSdw = _ZERO_ AdvBcup = oneSided From cbf9226b67611e49bbd327896643755bf894569f Mon Sep 17 00:00:00 2001 From: Julia Putko Date: Wed, 4 Aug 2021 12:38:53 -0700 Subject: [PATCH 33/63] clean --- extern/stim | 2 +- src/gotm/gotm.F90 | 21 ++++++--------------- src/gotm/register_all_variables.F90 | 14 +++++--------- src/meanflow/salinity.F90 | 6 ++---- 4 files changed, 14 insertions(+), 29 deletions(-) diff --git a/extern/stim b/extern/stim index fe0735ce..990f67d2 160000 --- a/extern/stim +++ b/extern/stim @@ -1 +1 @@ -Subproject commit fe0735ce55d96eafb9bc2d8b4063cc804dc72cde +Subproject commit 990f67d244af98094d6a76ad8956df8bc5cfbd90 diff --git a/src/gotm/gotm.F90 b/src/gotm/gotm.F90 index 26136dac..e7b5c168 100644 --- a/src/gotm/gotm.F90 +++ b/src/gotm/gotm.F90 @@ -415,11 +415,9 @@ subroutine initialize_gotm() call fm%register_dimension('lat',1,id=id_dim_lat) call fm%register_dimension('z',nlev,id=id_dim_z) call fm%register_dimension('zi',nlev+1,id=id_dim_zi) - ! call fm%register_dimension('z1',nilay,id=id_dim_z1) !jpnote commented #ifdef _ICE_ -!when compiling with stim off we dont have access to stim variables - call fm%register_dimension('zice',nilay+1,id=id_dim_zice) !jpnote - call fm%register_dimension('dzice',nilay,id=id_dim_dzice) !jpnote + call fm%register_dimension('zice',nilay+1,id=id_dim_zice) + call fm%register_dimension('dzice',nilay,id=id_dim_dzice) #endif call fm%register_dimension('time',id=id_dim_time) call fm%initialize(prepend_by_default=(/id_dim_lon,id_dim_lat/),append_by_default=(/id_dim_time/)) @@ -694,8 +692,6 @@ subroutine integrate_gotm() ! ! !LOCAL VARIABLES: - ! integer :: np !jpnote - integer(kind=timestepkind):: n integer :: i=0 @@ -756,18 +752,13 @@ subroutine integrate_gotm() #ifdef _ICE_ Qsw = I_0%value - !np = ubound(S,1) - call do_ice(h(nlev),dt,T(nlev),S(nlev),ta,precip%value,Qsw, & !h -- sum of dz ,, T -- temp of water !make sure arrays are not shaped for water + + call do_ice(h(nlev),dt,T(nlev),S(nlev),ta,precip%value,Qsw, & surface_fluxes,julianday,secondsofday,longitude, & latitude,I_0%value,airt%value,airp%value,hum%value, & - u10%value,v10%value,cloud%value,rho(nlev),rho_0,ql%method, & !sst,sss%value, !ql%method == longwave_radiation_method + u10%value,v10%value,cloud%value,rho(nlev),rho_0,ql%method, & hum_method,fluxes_method,albedo,heat%value) - !call do_ice(h(np),dt,T(np),S(np),ta,precip%value,Qsw, & !h -- sum of dz ,, T -- temp of water !make sure arrays are not shaped for water - ! surface_fluxes,julianday,secondsofday,longitude, & - ! latitude,I_0%value,airt%value,airp%value,hum%value, & - ! u10%value,v10%value,cloud%value,rho(np),rho_0,ql%method, & !sst,sss%value, !ql%method == longwave_radiation_method - ! hum_method,fluxes_method,albedo,heat%value) #endif ! reset some quantities @@ -805,7 +796,7 @@ subroutine integrate_gotm() ! update temperature and salinity if (sprof%method .ne. 0) then - call salinity(nlev,dt,cnpar,nus,gams,ice_uvic_Fs,ice_uvic_Ff) !jpnote passing ice_uvic_fs and ice_uvic_ff from ice + call salinity(nlev,dt,cnpar,nus,gams,ice_uvic_Fs,ice_uvic_Ff) endif if (tprof%method .ne. 0) then diff --git a/src/gotm/register_all_variables.F90 b/src/gotm/register_all_variables.F90 index bb1d6e9a..62711e54 100644 --- a/src/gotm/register_all_variables.F90 +++ b/src/gotm/register_all_variables.F90 @@ -229,12 +229,12 @@ subroutine register_stim_variables(nlev) call fm%register('dHis', 'm', 'ice growth (surface)', standard_name='', data0d=dHis, category='ice') call fm%register('dHib', 'm', 'ice growth (bottom)', standard_name='', data0d=dHib, category='ice') -!Flato -!Vars from ice_uvic.F90 +! Flato +! Vars from ice_uvic.F90 call fm%register('simass', 'kg/m2"', 'Ice mass per area', standard_name='', data0d=simass, category='ice') call fm%register('snmass', 'kg/m2', 'Snow mass per area', standard_name='', data0d=snmass, category='ice') call fm%register('meltmass', 'kg/m2', 'meltpond mass per area"', standard_name='', data0d=meltmass, category='ice') -!public vars from ice.F90 +! Public vars from ice.F90 call fm%register('ice_hi', 'm', 'Ice thickness', standard_name='', data0d=ice_hi, category='ice') call fm%register('ice_hs', 'm', 'Snow thickness', standard_name='', data0d=ice_hs, category='ice') call fm%register('ice_hm', 'm', 'Meltpond thickness', standard_name='', data0d=ice_uvic_hm, category='ice') @@ -258,14 +258,10 @@ subroutine register_stim_variables(nlev) call fm%register('Aice', '', 'fraction of ice area that is bare ice', standard_name='', data0d=ice_uvic_Aice, category='ice') call fm%register('Asnow', '', 'fraction of ice area that is snow covered', standard_name='', data0d=ice_uvic_Asnow, category='ice') call fm%register('Amelt', '', 'fraction of ice area that is melt pond', standard_name='', data0d=ice_uvic_Amelt, category='ice') - - call fm%register('dzi', 'm', 'Ice layer thickness', standard_name='', dimensions=(/id_dim_dzice/), data1d=ice_uvic_dzi(2:nilay+1), category='ice') !changed from 1:nilay to 2:nilay+1 - - call fm%register('ice_uvic_zi', 'm', 'interface depth', standard_name='', dimensions=(/id_dim_zice/), data1d=ice_uvic_zi(2:nilay+2), category='ice') ! zi in old code corresponds to ice_uvic_zi in new code + call fm%register('dzi', 'm', 'Ice layer thickness', standard_name='', dimensions=(/id_dim_dzice/), data1d=ice_uvic_dzi(2:nilay+1), category='ice') + call fm%register('ice_uvic_zi', 'm', 'interface depth', standard_name='', dimensions=(/id_dim_zice/), data1d=ice_uvic_zi(2:nilay+2), category='ice') call fm%register('zice', 'm', 'interface depth', standard_name='', dimensions=(/id_dim_zice/),data1d=ice_uvic_zice(1:nilay+1), category='ice') call fm%register('dzice', 'm', 'interface depth', standard_name='', dimensions=(/id_dim_dzice/), data1d=ice_uvic_dzice(1:nilay), category='ice') - - call fm%register('Cond', 'W m-1 kg-1', 'Ice conductivity', standard_name='',dimensions=(/id_dim_dzice/),data1d=ice_uvic_Cond(2:nilay+1), category='ice') call fm%register('rhoCp', '10^6 J m-3 K-1', 'volum heat capacity', standard_name='',dimensions=(/id_dim_dzice/), data1d=ice_uvic_rhoCp(2:nilay+1), category='ice') call fm%register('Tice', 'Celsius', 'Ice slab temperature', standard_name='',dimensions=(/id_dim_zice/), data1d=ice_uvic_Tice(2:nilay+2), category='ice') diff --git a/src/meanflow/salinity.F90 b/src/meanflow/salinity.F90 index c1db14f1..fd1fd4c6 100644 --- a/src/meanflow/salinity.F90 +++ b/src/meanflow/salinity.F90 @@ -116,10 +116,8 @@ subroutine salinity(nlev,dt,cnpar,nus,gams,Fs,Ff) !jpnote passing in Fs and Ff f ! set boundary conditions DiffBcup = Neumann DiffBcdw = Neumann - !DiffSup = -S(nlev)*(precip%value+evap) !jpnote commenting - - DiffSup = -S(nlev)*(precip%value+evap+Ff)-Fs ! jpnote adding equation used in old code !need to pass in ff and fs for this - + DiffSup = -S(nlev)*(precip%value+evap+Ff)-Fs !NSnote, check signs +! DiffSup = -S(nlev)*(precip%value+evap) DiffSdw = _ZERO_ AdvBcup = oneSided From d2aec78be8631987b508ff66830dd46c6d723b9b Mon Sep 17 00:00:00 2001 From: Julia Putko Date: Thu, 5 Aug 2021 17:22:30 -0700 Subject: [PATCH 34/63] adding vars from gotm_fabm.nml and fabm.nml --- src/fabm/gotm_fabm.F90 | 170 +++++++++++++++++++++++++++++++++++++- src/gotm/gotm.F90 | 34 +++++++- src/meanflow/salinity.F90 | 7 +- 3 files changed, 207 insertions(+), 4 deletions(-) diff --git a/src/fabm/gotm_fabm.F90 b/src/fabm/gotm_fabm.F90 index 40bc5f87..b85afa3d 100644 --- a/src/fabm/gotm_fabm.F90 +++ b/src/fabm/gotm_fabm.F90 @@ -105,6 +105,24 @@ module gotm_fabm bioshade_feedback,bioalbedo_feedback,biodrag_feedback, & freshwater_impact,salinity_relaxation_to_freshwater_flux, & save_inputs, no_surface + + + + !declare fabm variables here? jpnote + !Yaml variables + ! + logical :: no_precipitation_dilution + REALTYPE :: r_pond,fmethod,fflush,drag,f_graze,zia,ac_ia,rnit,skno3_0,sknh4_0, & + sksil_0,ia_0,ia_b,ks_no3,ks_sil,maxg,mort,mort2,crit_melt,lcompp,rpp, & + t_sens,nu,md_no3,md_sil,chl2n,sil2n + + REALTYPE :: ac,f_seed,ph1_0,ph2_0,zo1_0,zo2_0,no3_0,nh4_0,de1_0,de2_0,bsi_0,sil_0,w1,w2,mu1,mu2,kn,rpp1,rpp2,mp1,mp2,gz1,kz1,az1,az2,mz1,rc,pp1,pp2,pd1,pd2,pz1,gz2,kz2,mz2,rd1,rd2,rd3,rpf,rn0,knt,qp,qz,qb,agg,rsin,ks,pmin + !real(rk) :: drag,f_graze,zia,ac_ia,ia_0,ia_b,rnit,skno3_0,sknh4_0,sksil_0,ks_no3,ks_sil,maxg,mort,mort2,crit_melt,lcompp,rpp,rpi,t_sens,nu,md_no3,md_sil,chl2n,sil2n + REALTYPE:: dic_0, alk_0, dic_sw, alk_sw, dic_ice, alk_ice, ik_diff, ik_on, ice_on, IA_on, tplv, btlv, prop2sw, prop2sw_melt + + + + ! Arrays for work, vertical movement, and cross-boundary fluxes REALTYPE,allocatable,dimension(:,:) :: ws @@ -250,7 +268,7 @@ subroutine configure_gotm_fabm(cfg) ! ! !INPUT PARAMETERS: class (type_settings), intent(inout) :: cfg - type (type_settings), pointer :: branch + type (type_settings), pointer :: branch, twig ! ! !REVISION HISTORY: ! Original author(s): Jorn Bruggeman @@ -266,6 +284,8 @@ subroutine configure_gotm_fabm(cfg) ! Initialize all namelist variables to reasonable default values. call cfg%get(fabm_calc, 'use', 'enable FABM', & default=.false.) + !fabm_calc ??? same as fabm calc + call cfg%get(freshwater_impact, 'freshwater_impact', 'enable dilution/concentration by precipitation/evaporation', & default=.true.) ! disable to check mass conservation branch => cfg%get_child('feedbacks', 'feedbacks to physics') @@ -306,6 +326,154 @@ subroutine configure_gotm_fabm(cfg) options=(/option(-1, 'auto-detect (prefer fabm.yaml)', 'auto'), option(0, 'fabm.nml', 'nml'), option(1, 'fabm.yaml', 'yaml')/), & default=-1, display=display_advanced) + +!mortenson FABM VARS from gotm.yaml + +!fabm.nml +!uvic_eco + branch => cfg%get_child('uvic_eco', 'University of Victoria Ecosystem model') + call branch%get(ac, 'ac', 'light attenuation coefficient','m-1', default=0.03_rk) + call branch%get(f_seed, 'f_seed', 'fraction of ice algal fux as ph2 seeding','-', default=0.0_rk) + call branch%get(ph1_0, 'ph1_0', 'ph1 initial value','umol/L', default=1.0_rk ) + call branch%get(ph2_0 , 'ph2_0 ', 'ph2 initial value','umol/L', default=0.5_rk) + call branch%get(zo1_0, 'zo1_0', 'zo1 initial value','umol/L', default=0.2_rk) + call branch%get(zo2_0, 'zo2_0', 'zo2 initial value','umol/L', default=0.1_rk) + call branch%get(nh4_0, 'nh4_0', 'nh4 initial value','umol/L', default=10.0_rk) + call branch%get(no3_0, 'no3_0', 'no3 initial value','umol/L', default=10.0_rk) + call branch%get(de1_0, 'de1_0', 'de1 initial value ','umol/L', default=1.0_rk) + call branch%get(de2_0, 'de2_0', 'de2 initial value','umol/L', default=1.0_rk) + call branch%get(bsi_0, 'bsi_0', 'bsi initial value','umol/L', default=1.0_rk) + call branch%get(sil_0 , 'sil_0 ', 'sil initial value','umol/L', default=5.0_rk) + call branch%get(w1 , 'w1 ', 'de1 sinking rate','m/d', default=6.0_rk) + call branch%get(w2 , 'w2 ', 'de2 sinking rate','m/d', default=6.0_rk) + call branch%get(mu1, 'mu1', 'ph1 maximum growth rate','1/d', default=2.0_rk) + call branch%get(mu2 , 'mu2 ', 'ph2 maximum growth rate','1/d', default=2.0_rk) + call branch%get(kn, 'kn', ' no3 & nh4 half saturation constant','umol/L', default=0.1_rk) + !call branch%get(al1, 'al1', 'initial slope of P-I curve ([time] is same unit as pmax)','m2/W/time', default=0) + !call branch%get(al2 , 'al2 ', 'initial slope of P-I curve ([time] is same unit as pmax)','m2/W/time', default=0) + call branch%get(rpp1, 'rpp1', 'maximum photosynthetic rate ([time] is same unit as alpha)','1/time', default=0.05_rk) + call branch%get(rpp2 , 'rpp2 ', 'maximum photosynthetic rate ([time] is same unit as alpha)','1/time', default=0.05_rk) + call branch%get(mp1, 'mp1', 'ph1 excretion rate ','1/d', default=0.05_rk) + call branch%get(mp2 , 'mp2 ', 'ph2 excretion rate','1/d', default=0.05_rk) + call branch%get(mz1, 'mz1', 'zo1 excretion rate ','1/d', default=0.1_rk) + call branch%get(mz2, 'mz2', 'zo2 excretion rate ','1/d', default=0.3_rk) + call branch%get(gz1, 'gz1', 'zo1 maximum grazing rate ','1/d', default=1.3_rk) + call branch%get(gz2, 'gz2', 'zo2 maximum grazing rate ','1/d', default=0.8_rk) + call branch%get(kz1, 'kz1', 'zo1 grazing half saturation constant ','umol/L', default=0.6_rk) + call branch%get(kz2, 'kz2', 'zo2 grazing half saturation constant ','umol/L', default=0.75_rk) + call branch%get(az1, 'az1', 'zo1 assimilation fraction ','-', default=0.7_rk) + call branch%get(az2, 'az2', 'zo2 assimilation fraction ','-', default=0.1_rk) + call branch%get(rc, 'rc', 'closure mortality rate','1/d', default=0.003_rk) + ! call branch%get(htlnh4, 'htlnh4', 'closure loss fraction to nh4','-', default=0) + ! call branch%get(htldet, 'htldet', 'closure loss fraction to det','-', default=0) + call branch%get(pp1, 'pp1', 'ph1 fraction as food for zo1','-', default=1.0_rk) + call branch%get(pp2, 'pp2', 'ph2 fraction as food for zo2','-', default=1.0_rk) + call branch%get(pd1, 'pd1', 'de1 fraction as food for zo1','-', default=0.5_rk) + call branch%get(pd2, 'pd2', 'de2 fraction as food for zo2','-', default=0.5_rk) + call branch%get(pz1, 'pz1', 'zo1 fraction as food for zo2','-', default=1.0_rk) + call branch%get(rd1, 'rd1', ' de1 remineralization rate','1/d', default=0.1_rk) + call branch%get(rd2, 'rd2', 'de2 remineralization rate','1/d', default=0.1_rk) + call branch%get(rd3, 'rd3', 'bsi remineralization rate','1/d', default=0.1_rk) + call branch%get(rpf, 'rpf', 'scale factor for nitrogen preference function','-', default=0.2_rk ) + call branch%get(rn0, 'rn0', 'nitrification rate at 0 deg.C','1/d', default=0.03_rk) + call branch%get(knt, 'knt', 'nitrification temperature coefficient','1/deg.C', default=0.0693_rk) + call branch%get(qp, 'qp', 'ph1 & ph2 Q10 factor','-', default=2.0_rk) + call branch%get(qz, 'qz', 'zo1 & zo2 Q10 factor','-', default=3.0_rk ) + call branch%get(qb, 'qb', 'bacteria Q10 factor','-', default=3.0_rk) + call branch%get(agg, 'agg', 'ph2 aggregation rate','1/d', default=0.07_rk) + call branch%get(rsin , 'rsin ', 'ph2 Si:N ratio','mol-Si/mol-N', default=2.0_rk) + call branch%get(ks, 'ks', 'si half saturation constant','umol/L', default=2.0_rk) + call branch%get(pmin, 'pmin', 'background plankton concentration','umol-N/L', default=0.01_rk) + +!ice_algea + branch => cfg%get_child('uvic_icealgae', 'University of Victoria Ice Algae model') + call branch%get(r_pond, 'r_pond', 'melt pond drainage rate','', default=0.0175_rk) + ! call branch%get(fmethod, 'fmethod', 'method for ice-ocean flux ', '', & + ! default=0._rk, pchild=twig) + !call twig%get(fmethod_method, 'type', 'method for ice-ocean flux ', & + ! options=(/option(0, 'for diffusion', 'diffusion'), option(1, 'for ice growth/melting', 'ice growth/melting'), & + ! option(2, 'for both diffusion and growth/melting', 'both diffusion and growth/melting')/), default=0) + !(0 for diffusion; 1 for ice growth/melting; 2 for both diffusion and growth/melting) + call branch%get(fmethod, 'fmethod ', 'method for ice-ocean flux','', default=0.0_rk) + ! call branch%get(fflush, 'fflush', 'method for flushing', '', & + ! default=0._rk, pchild=twig) + !call twig%get(fflush , 'fflush ', 'method for flushing', & + ! options=(/option(0, 'for no flushing', 'no flushing'), option(1, 'for surface flushing', 'surface flushing'), & + ! option(2, 'for surface+internal flushing', 'surface+internal flushing')/), default=0) + call branch%get(fflush , 'fflush ', 'method for flushing','', default=0.0_rk) + call branch%get(drag , 'drag ', 'drag coefficient at the ice-water interface ','-', default=0.005_rk) + call branch%get(f_graze, 'f_graze', 'fraction of ice algal growth lost due to grazing ','-', default=0.1_rk) + call branch%get(zia, 'zia', 'ice algal layer thickness ','m', default=0.03_rk) + call branch%get(ac_ia, 'ac_ia', 'specific light attenuation coefficient for ice algae','', default=0.03_rk) + call branch%get(rnit , 'rnit ', 'nitrification rate ','per day', default=0.1_rk) + call branch%get(ia_0 , 'ia_0 ', 'ia initial value ','mmol-N/m3', default=0.16_rk) + call branch%get(ia_b , 'ia_b ', 'ia background value ','mmol-N/m3', default=0.01_rk) + call branch%get(skno3_0, 'skno3_0', 'no3 initial value ','mmol/m3', default=2.0_rk) + call branch%get(sknh4_0, 'sknh4_0', 'nh4 initial value ','mmol/m3', default=0.01_rk) + call branch%get(sksil_0, 'sksil_0', 'sil initial value ','mmol/m3', default=5.0_rk) + call branch%get(ks_no3, 'ks_no3', 'no3 half-saturation value ','mmol/m3', default=1.0_rk) + call branch%get(ks_sil, 'ks_sil', 'sil half-saturation value ','mmol/m3', default=4.0_rk) + call branch%get(maxg, 'maxg', 'maximum specific growth rate ','d-1', default=0.8511_rk) + call branch%get(mort , 'mort ', 'linear mortality rate','d-1', default=0.05_rk) + call branch%get(mort2, 'mort2', 'quadratic mortality rate ','d-1', default=0.05_rk) + call branch%get(crit_melt, 'crit_melt', 'critical melt rate [m d-1]','m d-1', default=0.015_rk) + call branch%get(lcompp, 'lcompp', '# compensation intensity ','umol m-2 s-1', default=0.4_rk) + call branch%get(rpp , 'rpp ', 'ratio of photosynthetic parameters (alpha and pbm) [W m-2]-1','[W m-2]-1', default=0.1_rk) + !call branch%get(rpi , 'rpi ', 'ratio of photoinhibition parameters (beta and pbm)', default=0) + call branch%get(t_sens , 't_sens ', 'temperature sensitivity ','deg.C-1', default=0.0633_rk) + call branch%get(nu , 'nu ', 'kinematic viscosity?','', default=1.86e-6_rk) + call branch%get(md_no3, 'md_no3', 'molecular diffusion coefficient for nitrate','', default=0.47e-9_rk) + call branch%get(md_sil , 'md_sil ', 'molecular diffusion coefficient for dissolved silica','', default=0.47e-9_rk) + call branch%get(chl2n , 'chl2n ', 'chl to nitrogen ratio','', default=2.8_rk) + call branch%get(sil2n , 'sil2n ', 'silicon to nitrogen ratio','', default=1.7_rk) + +! uvic_icedic + branch => cfg%get_child('uvic_icedic', 'University of Victoria Ice DIC model') + call branch%get(dic_0, 'dic_0', 'initial DIC in water column','mmol/m3', default=2190.0_rk) + call branch%get(alk_0 , 'alk_0 ', 'initial TA in water column','mmol/m3', default=2100.0_rk) + call branch%get(dic_sw, 'dic_sw', 'dic_sw','', default=2100.0_rk) + call branch%get(alk_sw, 'alk_sw', 'alk_sw','', default=2200.0_rk) + call branch%get(dic_ice, 'dic_ice', '[DIC] for ice','mmol/m3', default=400.0_rk) !400.0_rk + call branch%get(alk_ice, 'alk_ice', '[TA] for growing ice','mmol/m3', default=500.0_rk) !500.0_rk + call branch%get(ik_diff, 'ik_diff', 'difference (in melting ice) in [DIC] and 2*[TA] for ice with ikaite precipitaion','', default=50.0_rk) + call branch%get(ik_on, 'ik_on', '(0 or 1), turns off ikaite pump','0 or 1', default=1.0_rk) + call branch%get(ice_on, 'ice_on', '(0 or 1), turns off ice carbon pump','0 or 1', default=1.0_rk) + call branch%get(IA_on, 'IA_on', '(0 or 1), turns off ice algae carbon pump (not used now, bc can do same by ia_0=ia_b=0 in uvic_icealgae)','0 or 1', default=1.0_rk) + call branch%get(tplv, 'tplv', 'top of brine-associated DIC depth','m', default=40.0_rk) + call branch%get(btlv, 'btlv', 'bottom of brine-associated DIC depth','m', default=50.0_rk) + call branch%get(prop2sw, 'prop2sw', 'proportion of DIC rejected that is released into the ocean (the remainder presumably into the atmosphere)','', default=0.99_rk) + !prop2sw_melt=0.975_rk !SA: 1.0, def., 0.95, 0.9, 0.5 !right now, default = 0.975 + +!gotm_fabm.nml --- jpnote some of these might be already existing settings --------- !but there isnt actually anywhere in the yaml where they are coming in from + branch => cfg%get_child('gotm_fabm_nml', 'setting from the mortenson gotm_fabm.nml') !jpnote change label/how it's organized in the yaml? + call branch%get(fabm_calc, 'fabm_calc', 'fabm_calc', default=.false.) + call branch%get(cnpar, 'cnpar', 'cnpar','', default=1.0_rk) + !call branch%get(w_adv_discr, 'w_adv_discr', 'w_adv_discr','', default=6.0_rk) + !call branch%get(ode_method, 'ode_method', 'ode_method','', default=1.0_rk) + !call branch%get(split_factor, 'split_factor', 'split_factor','', default=1.0_rk) + call branch%get(bioshade_feedback, 'bioshade_feedback', 'bioshade_feedback', default=.true.) + call branch%get(bioalbedo_feedback, 'bioalbedo_feedback', 'bioalbedo_feedback', default=.true.) + call branch%get(biodrag_feedback, 'biodrag_feedback', 'biodrag_feedback', default=.true.) + call branch%get(repair_state, 'repair_state', 'repair_state', default=.false.) + call branch%get(salinity_relaxation_to_freshwater_flux, 'salinity_relaxation_to_freshwater_flux', 'salinity_relaxation_to_freshwater_flux', default=.false.) + call branch%get(no_precipitation_dilution, 'no_precipitation_dilution', 'no_precipitation_dilution', default=.false.) + call branch%get(save_inputs, 'save_inputs', 'save_inputs', default=.false.) + + + !call branch%get(, '', '','', default=_rk) + + + + + + +!fabm_input.nml + + + + + + LEVEL2 'done.' end subroutine configure_gotm_fabm diff --git a/src/gotm/gotm.F90 b/src/gotm/gotm.F90 index e7b5c168..e103bce6 100644 --- a/src/gotm/gotm.F90 +++ b/src/gotm/gotm.F90 @@ -61,9 +61,9 @@ module gotm #ifdef _ICE_ use ice, only: init_ice, post_init_ice, do_ice, clean_ice, ice_cover use stim_variables, only: Tice_surface,albedo_ice,transmissivity,nilay,ice_uvic_Tice +#endif use stim_variables, only: ice_hs,ice_hi,ice_uvic_topmelt,ice_uvic_topgrowth,ice_uvic_termelt,ice_uvic_botmelt,ice_uvic_botgrowth,ice_uvic_tb,ice_uvic_ts use stim_variables, only: ice_uvic_Fs,ice_uvic_Ff,ice_uvic_parb,ice_uvic_parui,ice_uvic_Amelt -#endif use turbulence, only: turb_method use turbulence, only: init_turbulence,post_init_turbulence,do_turbulence @@ -568,6 +568,28 @@ subroutine initialize_gotm() call model_fabm%link_horizontal_data(standard_variables_fabm%bottom_depth,depth) call model_fabm%link_horizontal_data(standard_variables_fabm%bottom_depth_below_geoid,depth0) call model_fabm%link_horizontal_data(standard_variables_fabm%bottom_roughness_length,z0b) + + + !ice vars--------- jpnote +#if 0 + call model_fabm%link_horizontal_data(standard_variables_fabm%sea_ice_thickness,ice_hi) + call model_fabm%link_horizontal_data(standard_variables_fabm%snow_thickness,ice_hs) + call model_fabm%link_horizontal_data(standard_variables_fabm%topmelt,ice_uvic_topmelt) + call model_fabm%link_horizontal_data(standard_variables_fabm%f_melt,ice_uvic_Amelt) + call model_fabm%link_horizontal_data(standard_variables_fabm%topgrowth,ice_uvic_topgrowth) + call model_fabm%link_horizontal_data(standard_variables_fabm%termelt,ice_uvic_termelt) + call model_fabm%link_horizontal_data(standard_variables_fabm%tendency_of_sea_ice_thickness_due_to_thermodynamics_melt,ice_uvic_botmelt) + call model_fabm%link_horizontal_data(standard_variables_fabm%tendency_of_sea_ice_thickness_due_to_thermodynamics_grow,ice_uvic_botgrowth) + call model_fabm%link_horizontal_data(standard_variables_fabm%sea_ice_temperature,ice_uvic_tb) + call model_fabm%link_horizontal_data(standard_variables_fabm%surface_ice_temperature,ice_uvic_ts) + call model_fabm%link_horizontal_data(standard_variables_fabm%lowest_ice_layer_PAR,ice_uvic_parb) + call model_fabm%link_horizontal_data(standard_variables_fabm%under_ice_PAR,ice_uvic_parui) + + call model_fabm%link_bulk_data(standard_variables_fabm%zonal_current,u(1:nlev)) + call model_fabm%link_bulk_data(standard_variables_fabm%meridional_current,v(1:nlev)) + !------------------ +#endif + if (fluxes_method /= 0) then call model_fabm%link_horizontal_data(standard_variables_fabm%surface_specific_humidity,qa) call model_fabm%link_horizontal_data(standard_variables_fabm%surface_air_pressure,airp%value) @@ -595,6 +617,10 @@ subroutine initialize_gotm() ! Initialize FABM initial state (this is done after the first call to do_input, ! to allow user-specified observed values to be used as initial state) if (fabm_calc) call init_gotm_fabm_state(nlev) + + + !jpnote call init_gotm_fabm_output? + #endif if (restart) then @@ -796,7 +822,13 @@ subroutine integrate_gotm() ! update temperature and salinity if (sprof%method .ne. 0) then +#ifdef _ICE_ + call salinity(nlev,dt,cnpar,nus,gams,ice_uvic_Fs,ice_uvic_Ff) +#else + call salinity(nlev,dt,cnpar,nus,gams) +#endif + endif if (tprof%method .ne. 0) then diff --git a/src/meanflow/salinity.F90 b/src/meanflow/salinity.F90 index fd1fd4c6..eb30aa42 100644 --- a/src/meanflow/salinity.F90 +++ b/src/meanflow/salinity.F90 @@ -91,7 +91,7 @@ subroutine salinity(nlev,dt,cnpar,nus,gams,Fs,Ff) !jpnote passing in Fs and Ff f ! ! ! ice-ocean interaction salt and freshwater fluxes - REALTYPE, intent(in) :: Fs,Ff !jpnote added + REALTYPE, optional, intent(in) :: Fs,Ff !jpnote added !optional - not needed when not running ice? ! ! !REVISION HISTORY: @@ -116,8 +116,11 @@ subroutine salinity(nlev,dt,cnpar,nus,gams,Fs,Ff) !jpnote passing in Fs and Ff f ! set boundary conditions DiffBcup = Neumann DiffBcdw = Neumann +#ifdef _ICE_ DiffSup = -S(nlev)*(precip%value+evap+Ff)-Fs !NSnote, check signs -! DiffSup = -S(nlev)*(precip%value+evap) +#else + DiffSup = -S(nlev)*(precip%value+evap) +#endif DiffSdw = _ZERO_ AdvBcup = oneSided From 19f0a352c4a55dd9332fb03bbf48fa3af7ba727b Mon Sep 17 00:00:00 2001 From: Julia Putko Date: Fri, 6 Aug 2021 09:44:00 -0700 Subject: [PATCH 35/63] removed _ICE_ condition from salinity --- src/gotm/gotm.F90 | 4 ---- src/meanflow/salinity.F90 | 7 +++---- 2 files changed, 3 insertions(+), 8 deletions(-) diff --git a/src/gotm/gotm.F90 b/src/gotm/gotm.F90 index e103bce6..4095ea41 100644 --- a/src/gotm/gotm.F90 +++ b/src/gotm/gotm.F90 @@ -822,12 +822,8 @@ subroutine integrate_gotm() ! update temperature and salinity if (sprof%method .ne. 0) then -#ifdef _ICE_ call salinity(nlev,dt,cnpar,nus,gams,ice_uvic_Fs,ice_uvic_Ff) -#else - call salinity(nlev,dt,cnpar,nus,gams) -#endif endif diff --git a/src/meanflow/salinity.F90 b/src/meanflow/salinity.F90 index eb30aa42..267f6450 100644 --- a/src/meanflow/salinity.F90 +++ b/src/meanflow/salinity.F90 @@ -116,11 +116,10 @@ subroutine salinity(nlev,dt,cnpar,nus,gams,Fs,Ff) !jpnote passing in Fs and Ff f ! set boundary conditions DiffBcup = Neumann DiffBcdw = Neumann -#ifdef _ICE_ DiffSup = -S(nlev)*(precip%value+evap+Ff)-Fs !NSnote, check signs -#else - DiffSup = -S(nlev)*(precip%value+evap) -#endif + + !DiffSup = -S(nlev)*(precip%value+evap) + DiffSdw = _ZERO_ AdvBcup = oneSided From e0a6754605275b104b0416906c10107c902591ed Mon Sep 17 00:00:00 2001 From: Julia Putko Date: Fri, 6 Aug 2021 10:06:31 -0700 Subject: [PATCH 36/63] making vars available outside of ice --- src/gotm/gotm.F90 | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/gotm/gotm.F90 b/src/gotm/gotm.F90 index e7b5c168..5a85c0e2 100644 --- a/src/gotm/gotm.F90 +++ b/src/gotm/gotm.F90 @@ -61,9 +61,10 @@ module gotm #ifdef _ICE_ use ice, only: init_ice, post_init_ice, do_ice, clean_ice, ice_cover use stim_variables, only: Tice_surface,albedo_ice,transmissivity,nilay,ice_uvic_Tice +#endif use stim_variables, only: ice_hs,ice_hi,ice_uvic_topmelt,ice_uvic_topgrowth,ice_uvic_termelt,ice_uvic_botmelt,ice_uvic_botgrowth,ice_uvic_tb,ice_uvic_ts use stim_variables, only: ice_uvic_Fs,ice_uvic_Ff,ice_uvic_parb,ice_uvic_parui,ice_uvic_Amelt -#endif + use turbulence, only: turb_method use turbulence, only: init_turbulence,post_init_turbulence,do_turbulence From 223c40628898a7c678b1b585d4a83dda35c9a5a1 Mon Sep 17 00:00:00 2001 From: Julia Putko Date: Mon, 9 Aug 2021 14:54:18 -0700 Subject: [PATCH 37/63] adding model uvic to fabm --- extern/fabm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extern/fabm b/extern/fabm index ab8a6ffc..bbfd4720 160000 --- a/extern/fabm +++ b/extern/fabm @@ -1 +1 @@ -Subproject commit ab8a6ffc5ceecd6e467878fe7e3142adcc49ab3a +Subproject commit bbfd4720db23295f15ff964b0b54459b4a51903c From bc861d5642723cf7695353b53abc59d2cc76356c Mon Sep 17 00:00:00 2001 From: Julia Putko Date: Tue, 10 Aug 2021 11:21:21 -0700 Subject: [PATCH 38/63] changes for new model --- src/fabm/gotm_fabm.F90 | 96 +----------------------------------------- src/gotm/gotm.F90 | 10 +++-- 2 files changed, 8 insertions(+), 98 deletions(-) diff --git a/src/fabm/gotm_fabm.F90 b/src/fabm/gotm_fabm.F90 index b85afa3d..9fe70aef 100644 --- a/src/fabm/gotm_fabm.F90 +++ b/src/fabm/gotm_fabm.F90 @@ -330,102 +330,10 @@ subroutine configure_gotm_fabm(cfg) !mortenson FABM VARS from gotm.yaml !fabm.nml -!uvic_eco - branch => cfg%get_child('uvic_eco', 'University of Victoria Ecosystem model') - call branch%get(ac, 'ac', 'light attenuation coefficient','m-1', default=0.03_rk) - call branch%get(f_seed, 'f_seed', 'fraction of ice algal fux as ph2 seeding','-', default=0.0_rk) - call branch%get(ph1_0, 'ph1_0', 'ph1 initial value','umol/L', default=1.0_rk ) - call branch%get(ph2_0 , 'ph2_0 ', 'ph2 initial value','umol/L', default=0.5_rk) - call branch%get(zo1_0, 'zo1_0', 'zo1 initial value','umol/L', default=0.2_rk) - call branch%get(zo2_0, 'zo2_0', 'zo2 initial value','umol/L', default=0.1_rk) - call branch%get(nh4_0, 'nh4_0', 'nh4 initial value','umol/L', default=10.0_rk) - call branch%get(no3_0, 'no3_0', 'no3 initial value','umol/L', default=10.0_rk) - call branch%get(de1_0, 'de1_0', 'de1 initial value ','umol/L', default=1.0_rk) - call branch%get(de2_0, 'de2_0', 'de2 initial value','umol/L', default=1.0_rk) - call branch%get(bsi_0, 'bsi_0', 'bsi initial value','umol/L', default=1.0_rk) - call branch%get(sil_0 , 'sil_0 ', 'sil initial value','umol/L', default=5.0_rk) - call branch%get(w1 , 'w1 ', 'de1 sinking rate','m/d', default=6.0_rk) - call branch%get(w2 , 'w2 ', 'de2 sinking rate','m/d', default=6.0_rk) - call branch%get(mu1, 'mu1', 'ph1 maximum growth rate','1/d', default=2.0_rk) - call branch%get(mu2 , 'mu2 ', 'ph2 maximum growth rate','1/d', default=2.0_rk) - call branch%get(kn, 'kn', ' no3 & nh4 half saturation constant','umol/L', default=0.1_rk) - !call branch%get(al1, 'al1', 'initial slope of P-I curve ([time] is same unit as pmax)','m2/W/time', default=0) - !call branch%get(al2 , 'al2 ', 'initial slope of P-I curve ([time] is same unit as pmax)','m2/W/time', default=0) - call branch%get(rpp1, 'rpp1', 'maximum photosynthetic rate ([time] is same unit as alpha)','1/time', default=0.05_rk) - call branch%get(rpp2 , 'rpp2 ', 'maximum photosynthetic rate ([time] is same unit as alpha)','1/time', default=0.05_rk) - call branch%get(mp1, 'mp1', 'ph1 excretion rate ','1/d', default=0.05_rk) - call branch%get(mp2 , 'mp2 ', 'ph2 excretion rate','1/d', default=0.05_rk) - call branch%get(mz1, 'mz1', 'zo1 excretion rate ','1/d', default=0.1_rk) - call branch%get(mz2, 'mz2', 'zo2 excretion rate ','1/d', default=0.3_rk) - call branch%get(gz1, 'gz1', 'zo1 maximum grazing rate ','1/d', default=1.3_rk) - call branch%get(gz2, 'gz2', 'zo2 maximum grazing rate ','1/d', default=0.8_rk) - call branch%get(kz1, 'kz1', 'zo1 grazing half saturation constant ','umol/L', default=0.6_rk) - call branch%get(kz2, 'kz2', 'zo2 grazing half saturation constant ','umol/L', default=0.75_rk) - call branch%get(az1, 'az1', 'zo1 assimilation fraction ','-', default=0.7_rk) - call branch%get(az2, 'az2', 'zo2 assimilation fraction ','-', default=0.1_rk) - call branch%get(rc, 'rc', 'closure mortality rate','1/d', default=0.003_rk) - ! call branch%get(htlnh4, 'htlnh4', 'closure loss fraction to nh4','-', default=0) - ! call branch%get(htldet, 'htldet', 'closure loss fraction to det','-', default=0) - call branch%get(pp1, 'pp1', 'ph1 fraction as food for zo1','-', default=1.0_rk) - call branch%get(pp2, 'pp2', 'ph2 fraction as food for zo2','-', default=1.0_rk) - call branch%get(pd1, 'pd1', 'de1 fraction as food for zo1','-', default=0.5_rk) - call branch%get(pd2, 'pd2', 'de2 fraction as food for zo2','-', default=0.5_rk) - call branch%get(pz1, 'pz1', 'zo1 fraction as food for zo2','-', default=1.0_rk) - call branch%get(rd1, 'rd1', ' de1 remineralization rate','1/d', default=0.1_rk) - call branch%get(rd2, 'rd2', 'de2 remineralization rate','1/d', default=0.1_rk) - call branch%get(rd3, 'rd3', 'bsi remineralization rate','1/d', default=0.1_rk) - call branch%get(rpf, 'rpf', 'scale factor for nitrogen preference function','-', default=0.2_rk ) - call branch%get(rn0, 'rn0', 'nitrification rate at 0 deg.C','1/d', default=0.03_rk) - call branch%get(knt, 'knt', 'nitrification temperature coefficient','1/deg.C', default=0.0693_rk) - call branch%get(qp, 'qp', 'ph1 & ph2 Q10 factor','-', default=2.0_rk) - call branch%get(qz, 'qz', 'zo1 & zo2 Q10 factor','-', default=3.0_rk ) - call branch%get(qb, 'qb', 'bacteria Q10 factor','-', default=3.0_rk) - call branch%get(agg, 'agg', 'ph2 aggregation rate','1/d', default=0.07_rk) - call branch%get(rsin , 'rsin ', 'ph2 Si:N ratio','mol-Si/mol-N', default=2.0_rk) - call branch%get(ks, 'ks', 'si half saturation constant','umol/L', default=2.0_rk) - call branch%get(pmin, 'pmin', 'background plankton concentration','umol-N/L', default=0.01_rk) + !ice_algea - branch => cfg%get_child('uvic_icealgae', 'University of Victoria Ice Algae model') - call branch%get(r_pond, 'r_pond', 'melt pond drainage rate','', default=0.0175_rk) - ! call branch%get(fmethod, 'fmethod', 'method for ice-ocean flux ', '', & - ! default=0._rk, pchild=twig) - !call twig%get(fmethod_method, 'type', 'method for ice-ocean flux ', & - ! options=(/option(0, 'for diffusion', 'diffusion'), option(1, 'for ice growth/melting', 'ice growth/melting'), & - ! option(2, 'for both diffusion and growth/melting', 'both diffusion and growth/melting')/), default=0) - !(0 for diffusion; 1 for ice growth/melting; 2 for both diffusion and growth/melting) - call branch%get(fmethod, 'fmethod ', 'method for ice-ocean flux','', default=0.0_rk) - ! call branch%get(fflush, 'fflush', 'method for flushing', '', & - ! default=0._rk, pchild=twig) - !call twig%get(fflush , 'fflush ', 'method for flushing', & - ! options=(/option(0, 'for no flushing', 'no flushing'), option(1, 'for surface flushing', 'surface flushing'), & - ! option(2, 'for surface+internal flushing', 'surface+internal flushing')/), default=0) - call branch%get(fflush , 'fflush ', 'method for flushing','', default=0.0_rk) - call branch%get(drag , 'drag ', 'drag coefficient at the ice-water interface ','-', default=0.005_rk) - call branch%get(f_graze, 'f_graze', 'fraction of ice algal growth lost due to grazing ','-', default=0.1_rk) - call branch%get(zia, 'zia', 'ice algal layer thickness ','m', default=0.03_rk) - call branch%get(ac_ia, 'ac_ia', 'specific light attenuation coefficient for ice algae','', default=0.03_rk) - call branch%get(rnit , 'rnit ', 'nitrification rate ','per day', default=0.1_rk) - call branch%get(ia_0 , 'ia_0 ', 'ia initial value ','mmol-N/m3', default=0.16_rk) - call branch%get(ia_b , 'ia_b ', 'ia background value ','mmol-N/m3', default=0.01_rk) - call branch%get(skno3_0, 'skno3_0', 'no3 initial value ','mmol/m3', default=2.0_rk) - call branch%get(sknh4_0, 'sknh4_0', 'nh4 initial value ','mmol/m3', default=0.01_rk) - call branch%get(sksil_0, 'sksil_0', 'sil initial value ','mmol/m3', default=5.0_rk) - call branch%get(ks_no3, 'ks_no3', 'no3 half-saturation value ','mmol/m3', default=1.0_rk) - call branch%get(ks_sil, 'ks_sil', 'sil half-saturation value ','mmol/m3', default=4.0_rk) - call branch%get(maxg, 'maxg', 'maximum specific growth rate ','d-1', default=0.8511_rk) - call branch%get(mort , 'mort ', 'linear mortality rate','d-1', default=0.05_rk) - call branch%get(mort2, 'mort2', 'quadratic mortality rate ','d-1', default=0.05_rk) - call branch%get(crit_melt, 'crit_melt', 'critical melt rate [m d-1]','m d-1', default=0.015_rk) - call branch%get(lcompp, 'lcompp', '# compensation intensity ','umol m-2 s-1', default=0.4_rk) - call branch%get(rpp , 'rpp ', 'ratio of photosynthetic parameters (alpha and pbm) [W m-2]-1','[W m-2]-1', default=0.1_rk) - !call branch%get(rpi , 'rpi ', 'ratio of photoinhibition parameters (beta and pbm)', default=0) - call branch%get(t_sens , 't_sens ', 'temperature sensitivity ','deg.C-1', default=0.0633_rk) - call branch%get(nu , 'nu ', 'kinematic viscosity?','', default=1.86e-6_rk) - call branch%get(md_no3, 'md_no3', 'molecular diffusion coefficient for nitrate','', default=0.47e-9_rk) - call branch%get(md_sil , 'md_sil ', 'molecular diffusion coefficient for dissolved silica','', default=0.47e-9_rk) - call branch%get(chl2n , 'chl2n ', 'chl to nitrogen ratio','', default=2.8_rk) - call branch%get(sil2n , 'sil2n ', 'silicon to nitrogen ratio','', default=1.7_rk) + ! uvic_icedic branch => cfg%get_child('uvic_icedic', 'University of Victoria Ice DIC model') diff --git a/src/gotm/gotm.F90 b/src/gotm/gotm.F90 index 4095ea41..4400525b 100644 --- a/src/gotm/gotm.F90 +++ b/src/gotm/gotm.F90 @@ -401,6 +401,8 @@ subroutine initialize_gotm() #ifdef _FABM_ if (read_nml) call configure_gotm_fabm_from_nml(namlst, 'gotm_fabm.nml') + !jpnote ?? look at gotm_fabm nml and fabm_input.nml .. + ! Allow FABM to create its model tree. After this we know all biogeochemical variables ! This must be done before gotm_fabm_input configuration. call gotm_fabm_create_model(namlst) @@ -571,7 +573,7 @@ subroutine initialize_gotm() !ice vars--------- jpnote -#if 0 + call model_fabm%link_horizontal_data(standard_variables_fabm%sea_ice_thickness,ice_hi) call model_fabm%link_horizontal_data(standard_variables_fabm%snow_thickness,ice_hs) call model_fabm%link_horizontal_data(standard_variables_fabm%topmelt,ice_uvic_topmelt) @@ -585,10 +587,10 @@ subroutine initialize_gotm() call model_fabm%link_horizontal_data(standard_variables_fabm%lowest_ice_layer_PAR,ice_uvic_parb) call model_fabm%link_horizontal_data(standard_variables_fabm%under_ice_PAR,ice_uvic_parui) - call model_fabm%link_bulk_data(standard_variables_fabm%zonal_current,u(1:nlev)) - call model_fabm%link_bulk_data(standard_variables_fabm%meridional_current,v(1:nlev)) + call model_fabm%link_interior_data(standard_variables_fabm%zonal_current,u(1:nlev)) !jpnote : changed from bulk data to interior data + call model_fabm%link_interior_data(standard_variables_fabm%meridional_current,v(1:nlev)) !jpnote: changed from bulk data to interior data !------------------ -#endif + if (fluxes_method /= 0) then call model_fabm%link_horizontal_data(standard_variables_fabm%surface_specific_humidity,qa) From 272189a71012f7f77ce46d076f7b2d31340f203e Mon Sep 17 00:00:00 2001 From: Patrick Farnole Date: Wed, 11 Aug 2021 11:30:32 -0700 Subject: [PATCH 39/63] update submodules stim, fabm and flexout. --- extern/fabm | 2 +- extern/flexout | 2 +- extern/stim | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/extern/fabm b/extern/fabm index ab8a6ffc..2e580282 160000 --- a/extern/fabm +++ b/extern/fabm @@ -1 +1 @@ -Subproject commit ab8a6ffc5ceecd6e467878fe7e3142adcc49ab3a +Subproject commit 2e5802828fe242d3144740332224db424e142cde diff --git a/extern/flexout b/extern/flexout index 274133ea..f129ad21 160000 --- a/extern/flexout +++ b/extern/flexout @@ -1 +1 @@ -Subproject commit 274133ea7c52a8e4a67fbe4f0791b6ad98cc4a79 +Subproject commit f129ad2181576624ae929331388d0a69bc574f7f diff --git a/extern/stim b/extern/stim index 990f67d2..4a67e03b 160000 --- a/extern/stim +++ b/extern/stim @@ -1 +1 @@ -Subproject commit 990f67d244af98094d6a76ad8956df8bc5cfbd90 +Subproject commit 4a67e03ba3347fe9a98d077a5ab3d2f15deedd56 From 1d04a55025ac1dedbb9c2574bd1185c4f6c4b42a Mon Sep 17 00:00:00 2001 From: Patrick Farnole Date: Wed, 11 Aug 2021 12:22:31 -0700 Subject: [PATCH 40/63] Adding stim --- extern/stim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extern/stim b/extern/stim index 4a67e03b..d6441f90 160000 --- a/extern/stim +++ b/extern/stim @@ -1 +1 @@ -Subproject commit 4a67e03ba3347fe9a98d077a5ab3d2f15deedd56 +Subproject commit d6441f9008e5fdc1fb735e05c46e26f90b6996c5 From 8138ac0ae1258cffd8223069bc21b75b7c4b4756 Mon Sep 17 00:00:00 2001 From: Julia Putko Date: Mon, 16 Aug 2021 14:51:48 -0700 Subject: [PATCH 41/63] synch --- src/fabm/gotm_fabm.F90 | 48 ++++++++++++++++-------------------------- 1 file changed, 18 insertions(+), 30 deletions(-) diff --git a/src/fabm/gotm_fabm.F90 b/src/fabm/gotm_fabm.F90 index 003fc421..36429570 100644 --- a/src/fabm/gotm_fabm.F90 +++ b/src/fabm/gotm_fabm.F90 @@ -111,12 +111,13 @@ module gotm_fabm !declare fabm variables here? jpnote !Yaml variables ! - logical :: no_precipitation_dilution - REALTYPE :: r_pond,fmethod,fflush,drag,f_graze,zia,ac_ia,rnit,skno3_0,sknh4_0, & - sksil_0,ia_0,ia_b,ks_no3,ks_sil,maxg,mort,mort2,crit_melt,lcompp,rpp, & - t_sens,nu,md_no3,md_sil,chl2n,sil2n +!logical :: use_icealgae + !logical :: no_precipitation_dilution + !REALTYPE :: r_pond,fmethod,fflush,drag,f_graze,zia,ac_ia,rnit,skno3_0,sknh4_0, & + ! sksil_0,ia_0,ia_b,ks_no3,ks_sil,maxg,mort,mort2,crit_melt,lcompp,rpp, & + ! t_sens,nu,md_no3,md_sil,chl2n,sil2n - REALTYPE :: ac,f_seed,ph1_0,ph2_0,zo1_0,zo2_0,no3_0,nh4_0,de1_0,de2_0,bsi_0,sil_0,w1,w2,mu1,mu2,kn,rpp1,rpp2,mp1,mp2,gz1,kz1,az1,az2,mz1,rc,pp1,pp2,pd1,pd2,pz1,gz2,kz2,mz2,rd1,rd2,rd3,rpf,rn0,knt,qp,qz,qb,agg,rsin,ks,pmin + !REALTYPE :: ac,f_seed,ph1_0,ph2_0,zo1_0,zo2_0,no3_0,nh4_0,de1_0,de2_0,bsi_0,sil_0,w1,w2,mu1,mu2,kn,rpp1,rpp2,mp1,mp2,gz1,kz1,az1,az2,mz1,rc,pp1,pp2,pd1,pd2,pz1,gz2,kz2,mz2,rd1,rd2,rd3,rpf,rn0,knt,qp,qz,qb,agg,rsin,ks,pmin !real(rk) :: drag,f_graze,zia,ac_ia,ia_0,ia_b,rnit,skno3_0,sknh4_0,sksil_0,ks_no3,ks_sil,maxg,mort,mort2,crit_melt,lcompp,rpp,rpi,t_sens,nu,md_no3,md_sil,chl2n,sil2n REALTYPE:: dic_0, alk_0, dic_sw, alk_sw, dic_ice, alk_ice, ik_diff, ik_on, ice_on, IA_on, tplv, btlv, prop2sw, prop2sw_melt @@ -336,36 +337,22 @@ subroutine configure_gotm_fabm(cfg) ! uvic_icedic - branch => cfg%get_child('uvic_icedic', 'University of Victoria Ice DIC model') - call branch%get(dic_0, 'dic_0', 'initial DIC in water column','mmol/m3', default=2190.0_rk) - call branch%get(alk_0 , 'alk_0 ', 'initial TA in water column','mmol/m3', default=2100.0_rk) - call branch%get(dic_sw, 'dic_sw', 'dic_sw','', default=2100.0_rk) - call branch%get(alk_sw, 'alk_sw', 'alk_sw','', default=2200.0_rk) - call branch%get(dic_ice, 'dic_ice', '[DIC] for ice','mmol/m3', default=400.0_rk) !400.0_rk - call branch%get(alk_ice, 'alk_ice', '[TA] for growing ice','mmol/m3', default=500.0_rk) !500.0_rk - call branch%get(ik_diff, 'ik_diff', 'difference (in melting ice) in [DIC] and 2*[TA] for ice with ikaite precipitaion','', default=50.0_rk) - call branch%get(ik_on, 'ik_on', '(0 or 1), turns off ikaite pump','0 or 1', default=1.0_rk) - call branch%get(ice_on, 'ice_on', '(0 or 1), turns off ice carbon pump','0 or 1', default=1.0_rk) - call branch%get(IA_on, 'IA_on', '(0 or 1), turns off ice algae carbon pump (not used now, bc can do same by ia_0=ia_b=0 in uvic_icealgae)','0 or 1', default=1.0_rk) - call branch%get(tplv, 'tplv', 'top of brine-associated DIC depth','m', default=40.0_rk) - call branch%get(btlv, 'btlv', 'bottom of brine-associated DIC depth','m', default=50.0_rk) - call branch%get(prop2sw, 'prop2sw', 'proportion of DIC rejected that is released into the ocean (the remainder presumably into the atmosphere)','', default=0.99_rk) - !prop2sw_melt=0.975_rk !SA: 1.0, def., 0.95, 0.9, 0.5 !right now, default = 0.975 + !gotm_fabm.nml --- jpnote some of these might be already existing settings --------- !but there isnt actually anywhere in the yaml where they are coming in from - branch => cfg%get_child('gotm_fabm_nml', 'setting from the mortenson gotm_fabm.nml') !jpnote change label/how it's organized in the yaml? - call branch%get(fabm_calc, 'fabm_calc', 'fabm_calc', default=.false.) - call branch%get(cnpar, 'cnpar', 'cnpar','', default=1.0_rk) + !branch => cfg%get_child('gotm_fabm_nml', 'setting from the mortenson gotm_fabm.nml') !jpnote change label/how it's organized in the yaml? + !call branch%get(fabm_calc, 'fabm_calc', 'fabm_calc', default=.false.) + !call branch%get(cnpar, 'cnpar', 'cnpar','', default=1.0_rk) !call branch%get(w_adv_discr, 'w_adv_discr', 'w_adv_discr','', default=6.0_rk) !call branch%get(ode_method, 'ode_method', 'ode_method','', default=1.0_rk) !call branch%get(split_factor, 'split_factor', 'split_factor','', default=1.0_rk) - call branch%get(bioshade_feedback, 'bioshade_feedback', 'bioshade_feedback', default=.true.) - call branch%get(bioalbedo_feedback, 'bioalbedo_feedback', 'bioalbedo_feedback', default=.true.) - call branch%get(biodrag_feedback, 'biodrag_feedback', 'biodrag_feedback', default=.true.) - call branch%get(repair_state, 'repair_state', 'repair_state', default=.false.) - call branch%get(salinity_relaxation_to_freshwater_flux, 'salinity_relaxation_to_freshwater_flux', 'salinity_relaxation_to_freshwater_flux', default=.false.) - call branch%get(no_precipitation_dilution, 'no_precipitation_dilution', 'no_precipitation_dilution', default=.false.) - call branch%get(save_inputs, 'save_inputs', 'save_inputs', default=.false.) + !call branch%get(bioshade_feedback, 'bioshade_feedback', 'bioshade_feedback', default=.true.) + ! call branch%get(bioalbedo_feedback, 'bioalbedo_feedback', 'bioalbedo_feedback', default=.true.) + !call branch%get(biodrag_feedback, 'biodrag_feedback', 'biodrag_feedback', default=.true.) + !call branch%get(repair_state, 'repair_state', 'repair_state', default=.false.) + !call branch%get(salinity_relaxation_to_freshwater_flux, 'salinity_relaxation_to_freshwater_flux', 'salinity_relaxation_to_freshwater_flux', default=.false.) + !call branch%get(no_precipitation_dilution, 'no_precipitation_dilution', 'no_precipitation_dilution', default=.false.) + !call branch%get(save_inputs, 'save_inputs', 'save_inputs', default=.false.) !call branch%get(, '', '','', default=_rk) @@ -775,6 +762,7 @@ subroutine init_var_gotm_fabm(nlev) ! and link it to FABM. decimal_yearday = _ZERO_ call model%link_scalar(standard_variables%number_of_days_since_start_of_the_year,decimal_yearday) + call model%link_scalar(standard_variables%timestep,dt) !jpnote added allocate(Qsour(0:nlev),stat=rc) if (rc /= 0) stop 'init_var_gotm_fabm(): Error allocating (Qsour)' From bd28648f8de004ee1147d375acc385947e507cf8 Mon Sep 17 00:00:00 2001 From: Andrew Shao Date: Fri, 20 Aug 2021 16:38:00 +0000 Subject: [PATCH 42/63] Reference Patrick's forks for repository The current .gitmodules references the main forks. Some work that has been recently been completed at UVic however has not yet been merged back into the main gotm repositories. To facillitate the use of the new code, the .gitmodules now references @PatrickFarnole's forks for stim, flexout, and fabm. --- .gitmodules | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/.gitmodules b/.gitmodules index 44e38b7c..1e132023 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,14 +1,12 @@ [submodule "extern/fabm"] path = extern/fabm - url = https://github.com/fabm-model/fabm -# url = ../../fabm-model/fabm + url = https://github.com/PatrickFarnole/fabm [submodule "extern/flexout"] path = extern/flexout - url = https://github.com/BoldingBruggeman/flexout -# url = ../../BoldingBruggeman/flexout + url = https://github.com/PatrickFarnole/flexout [submodule "extern/stim"] path = extern/stim - url = https://github.com/BoldingBruggeman/stim + url = https://github.com/PatrickFarnole/stim [submodule "extern/CVMix-src"] path = extern/CVMix-src url = https://github.com/CVMix/CVMix-src.git From 84dbc760e81237b589bbc4ee99e5409378d644f9 Mon Sep 17 00:00:00 2001 From: Julia Putko Date: Tue, 24 Aug 2021 16:44:25 -0700 Subject: [PATCH 43/63] adding Qfluxes_uvic --- extern/stim | 2 +- src/airsea/airsea.F90 | 36 ++++++++++++++++++++++++++++++++++++ src/gotm/gotm.F90 | 15 +++++++++------ 3 files changed, 46 insertions(+), 7 deletions(-) diff --git a/extern/stim b/extern/stim index 4a67e03b..a8d2346f 160000 --- a/extern/stim +++ b/extern/stim @@ -1 +1 @@ -Subproject commit 4a67e03ba3347fe9a98d077a5ab3d2f15deedd56 +Subproject commit a8d2346f08b61012d4ba015eb5a9d3d1a86305df diff --git a/src/airsea/airsea.F90 b/src/airsea/airsea.F90 index 1468b148..34b0e832 100644 --- a/src/airsea/airsea.F90 +++ b/src/airsea/airsea.F90 @@ -49,6 +49,7 @@ module airsea_driver public :: set_sst public :: set_ssuv public :: surface_fluxes + public :: surface_fluxes_uvic !jpnote added public :: integrated_fluxes #ifdef _PRINTSTATE_ public :: print_state_airsea @@ -735,6 +736,41 @@ subroutine post_init_airsea(lat,lon) end subroutine post_init_airsea !EOC +!----------------------------------------------------------------------- +!BOP + !jpnote added + subroutine surface_fluxes_uvic(surface_temp,sensible,latent,longwave_radiation_value) + ! + ! !USES: + IMPLICIT NONE + ! + ! !INPUT PARAMETERS: + REALTYPE, intent(in) :: surface_temp + ! !OUTPUT PARAMETERS: + REALTYPE, intent(out) :: sensible,latent,longwave_radiation_value + ! + ! LOCAL VARIABLES: + REALTYPE :: tw,tw_k,ta_k + !EOP + !----------------------------------------------------------------------- + !BOC + + tw = surface_temp-KELVIN + tw_k= surface_temp + ta_k = airt%value + KELVIN + + ! call humidity(hum_method,rh,airp,TTss-kelvin,airt) + call humidity(hum_method,hum%value,airp%value,tw,airt%value) + ! call longwave_radiation(longwave_radiation_method, & + ! lat,TTss,airt+kelvin,cloud,qb) + call longwave_radiation(ql%method, & + dlat,tw_k,ta_k,cloud%value,longwave_radiation_value) + !call airsea_fluxes(fluxes_method, & + !TTss-kelvin,airt,u10,v10,precip,evap,tx,ty,qe,qh) + call airsea_fluxes(fluxes_method, & + tw,airt%value,u10%value,v10%value,precip%value,evap,tx_%value,ty_%value,latent,sensible) + + end subroutine surface_fluxes_uvic !----------------------------------------------------------------------- !BOP subroutine surface_fluxes(surface_temp,sensible,latent,longwave_radiation) diff --git a/src/gotm/gotm.F90 b/src/gotm/gotm.F90 index 5a85c0e2..7ddc9724 100644 --- a/src/gotm/gotm.F90 +++ b/src/gotm/gotm.F90 @@ -49,7 +49,7 @@ module gotm use time use airsea_driver, only: init_airsea,post_init_airsea,do_airsea,clean_airsea - use airsea_driver, only: surface_fluxes + use airsea_driver, only: surface_fluxes, surface_fluxes_uvic !jpnote use airsea_driver, only: set_sst,set_ssuv,integrated_fluxes use airsea_driver, only: fluxes_method use airsea_driver, only: wind=>w,tx,ty,hum,I_0,cloud,heat,precip,evap,airp,albedo @@ -753,12 +753,15 @@ subroutine integrate_gotm() #ifdef _ICE_ Qsw = I_0%value - + !jpnote call do_ice(h(nlev),dt,T(nlev),S(nlev),ta,precip%value,Qsw, & - surface_fluxes,julianday,secondsofday,longitude, & - latitude,I_0%value,airt%value,airp%value,hum%value, & - u10%value,v10%value,cloud%value,rho(nlev),rho_0,ql%method, & - hum_method,fluxes_method,albedo,heat%value) + surface_fluxes,surface_fluxes_uvic,julianday,secondsofday, & + I_0%value,airt%value,rho(nlev),rho_0,albedo,heat%value) + ! call do_ice(h(nlev),dt,T(nlev),S(nlev),ta,precip%value,Qsw, & + ! surface_fluxes,surface_fluxes_uvic,julianday,secondsofday,longitude, & + ! latitude,I_0%value,airt%value,airp%value,hum%value, & + ! u10%value,v10%value,cloud%value,rho(nlev),rho_0,ql%method, & + ! hum_method,fluxes_method,albedo,heat%value) #endif From 36b06a21693a07fb0dce287459a570b9fb57a3e9 Mon Sep 17 00:00:00 2001 From: PatrickFarnole <35802372+PatrickFarnole@users.noreply.github.com> Date: Thu, 26 Aug 2021 12:14:42 +0200 Subject: [PATCH 44/63] Update .gitmodules redirect to PatrickFarnole fork --- .gitmodules | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/.gitmodules b/.gitmodules index 44e38b7c..1e132023 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,14 +1,12 @@ [submodule "extern/fabm"] path = extern/fabm - url = https://github.com/fabm-model/fabm -# url = ../../fabm-model/fabm + url = https://github.com/PatrickFarnole/fabm [submodule "extern/flexout"] path = extern/flexout - url = https://github.com/BoldingBruggeman/flexout -# url = ../../BoldingBruggeman/flexout + url = https://github.com/PatrickFarnole/flexout [submodule "extern/stim"] path = extern/stim - url = https://github.com/BoldingBruggeman/stim + url = https://github.com/PatrickFarnole/stim [submodule "extern/CVMix-src"] path = extern/CVMix-src url = https://github.com/CVMix/CVMix-src.git From 968421137e894f5337fcf2d58e1475effc9952ec Mon Sep 17 00:00:00 2001 From: Julia Putko Date: Tue, 24 Aug 2021 11:16:13 -0700 Subject: [PATCH 45/63] clean --- extern/fabm | 2 +- src/fabm/gotm_fabm.F90 | 37 ++++++++----------------------------- src/gotm/gotm.F90 | 4 ---- src/meanflow/salinity.F90 | 2 +- 4 files changed, 10 insertions(+), 35 deletions(-) diff --git a/extern/fabm b/extern/fabm index bbfd4720..378ae847 160000 --- a/extern/fabm +++ b/extern/fabm @@ -1 +1 @@ -Subproject commit bbfd4720db23295f15ff964b0b54459b4a51903c +Subproject commit 378ae8476bc1586cd7b56b4b31025ad7bb934fef diff --git a/src/fabm/gotm_fabm.F90 b/src/fabm/gotm_fabm.F90 index 36429570..80088b73 100644 --- a/src/fabm/gotm_fabm.F90 +++ b/src/fabm/gotm_fabm.F90 @@ -119,7 +119,7 @@ module gotm_fabm !REALTYPE :: ac,f_seed,ph1_0,ph2_0,zo1_0,zo2_0,no3_0,nh4_0,de1_0,de2_0,bsi_0,sil_0,w1,w2,mu1,mu2,kn,rpp1,rpp2,mp1,mp2,gz1,kz1,az1,az2,mz1,rc,pp1,pp2,pd1,pd2,pz1,gz2,kz2,mz2,rd1,rd2,rd3,rpf,rn0,knt,qp,qz,qb,agg,rsin,ks,pmin !real(rk) :: drag,f_graze,zia,ac_ia,ia_0,ia_b,rnit,skno3_0,sknh4_0,sksil_0,ks_no3,ks_sil,maxg,mort,mort2,crit_melt,lcompp,rpp,rpi,t_sens,nu,md_no3,md_sil,chl2n,sil2n - REALTYPE:: dic_0, alk_0, dic_sw, alk_sw, dic_ice, alk_ice, ik_diff, ik_on, ice_on, IA_on, tplv, btlv, prop2sw, prop2sw_melt + ! REALTYPE:: dic_0, alk_0, dic_sw, alk_sw, dic_ice, alk_ice, ik_diff, ik_on, ice_on, IA_on, tplv, btlv, prop2sw, prop2sw_melt @@ -285,7 +285,6 @@ subroutine configure_gotm_fabm(cfg) ! Initialize all namelist variables to reasonable default values. call cfg%get(fabm_calc, 'use', 'enable FABM', & default=.false.) - !fabm_calc ??? same as fabm calc call cfg%get(freshwater_impact, 'freshwater_impact', 'enable dilution/concentration by precipitation/evaporation', & default=.true.) ! disable to check mass conservation @@ -298,6 +297,7 @@ subroutine configure_gotm_fabm(cfg) default=.false.) call cfg%get(repair_state, 'repair_state', 'clip state to minimum/maximum boundaries', & default=.false.) + branch => cfg%get_child('numerics', display=display_advanced) call branch%get(ode_method, 'ode_method', 'time integration scheme applied to source terms', & options=(/ option(1, 'Forward Euler', 'FE'), option(2, 'Runge-Kutta 2', 'RK2'), option(3, 'Runge-Kutta 4', 'RK4'), & @@ -329,17 +329,8 @@ subroutine configure_gotm_fabm(cfg) !mortenson FABM VARS from gotm.yaml - -!fabm.nml - - -!ice_algea - - -! uvic_icedic - -!gotm_fabm.nml --- jpnote some of these might be already existing settings --------- !but there isnt actually anywhere in the yaml where they are coming in from +!gotm_fabm.nml jpnote some of these might be already existing settings --------- !but there isnt actually anywhere in the yaml where they are coming in from !branch => cfg%get_child('gotm_fabm_nml', 'setting from the mortenson gotm_fabm.nml') !jpnote change label/how it's organized in the yaml? !call branch%get(fabm_calc, 'fabm_calc', 'fabm_calc', default=.false.) !call branch%get(cnpar, 'cnpar', 'cnpar','', default=1.0_rk) @@ -353,22 +344,7 @@ subroutine configure_gotm_fabm(cfg) !call branch%get(salinity_relaxation_to_freshwater_flux, 'salinity_relaxation_to_freshwater_flux', 'salinity_relaxation_to_freshwater_flux', default=.false.) !call branch%get(no_precipitation_dilution, 'no_precipitation_dilution', 'no_precipitation_dilution', default=.false.) !call branch%get(save_inputs, 'save_inputs', 'save_inputs', default=.false.) - - - !call branch%get(, '', '','', default=_rk) - - - - - - -!fabm_input.nml - - - - - - + LEVEL2 'done.' end subroutine configure_gotm_fabm @@ -762,7 +738,10 @@ subroutine init_var_gotm_fabm(nlev) ! and link it to FABM. decimal_yearday = _ZERO_ call model%link_scalar(standard_variables%number_of_days_since_start_of_the_year,decimal_yearday) - call model%link_scalar(standard_variables%timestep,dt) !jpnote added + call model%link_scalar(standard_variables%timestep,dt) + + + !jpnote added allocate(Qsour(0:nlev),stat=rc) if (rc /= 0) stop 'init_var_gotm_fabm(): Error allocating (Qsour)' diff --git a/src/gotm/gotm.F90 b/src/gotm/gotm.F90 index 4400525b..9ae42abc 100644 --- a/src/gotm/gotm.F90 +++ b/src/gotm/gotm.F90 @@ -401,8 +401,6 @@ subroutine initialize_gotm() #ifdef _FABM_ if (read_nml) call configure_gotm_fabm_from_nml(namlst, 'gotm_fabm.nml') - !jpnote ?? look at gotm_fabm nml and fabm_input.nml .. - ! Allow FABM to create its model tree. After this we know all biogeochemical variables ! This must be done before gotm_fabm_input configuration. call gotm_fabm_create_model(namlst) @@ -571,7 +569,6 @@ subroutine initialize_gotm() call model_fabm%link_horizontal_data(standard_variables_fabm%bottom_depth_below_geoid,depth0) call model_fabm%link_horizontal_data(standard_variables_fabm%bottom_roughness_length,z0b) - !ice vars--------- jpnote call model_fabm%link_horizontal_data(standard_variables_fabm%sea_ice_thickness,ice_hi) @@ -621,7 +618,6 @@ subroutine initialize_gotm() if (fabm_calc) call init_gotm_fabm_state(nlev) - !jpnote call init_gotm_fabm_output? #endif diff --git a/src/meanflow/salinity.F90 b/src/meanflow/salinity.F90 index 267f6450..49ce3d87 100644 --- a/src/meanflow/salinity.F90 +++ b/src/meanflow/salinity.F90 @@ -91,7 +91,7 @@ subroutine salinity(nlev,dt,cnpar,nus,gams,Fs,Ff) !jpnote passing in Fs and Ff f ! ! ! ice-ocean interaction salt and freshwater fluxes - REALTYPE, optional, intent(in) :: Fs,Ff !jpnote added !optional - not needed when not running ice? + REALTYPE, optional, intent(in) :: Fs,Ff ! ! !REVISION HISTORY: From 3269b2bad4637b0df923aa18737c7ce86b889158 Mon Sep 17 00:00:00 2001 From: Julia Putko Date: Tue, 31 Aug 2021 17:24:05 -0700 Subject: [PATCH 46/63] adding fabm --- extern/fabm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extern/fabm b/extern/fabm index 378ae847..a6e3d10f 160000 --- a/extern/fabm +++ b/extern/fabm @@ -1 +1 @@ -Subproject commit 378ae8476bc1586cd7b56b4b31025ad7bb934fef +Subproject commit a6e3d10f7eb1e3018a35042295c8806b569005a7 From 9958834fb6018ceeaf19124c02e5e0cd7fc48c7a Mon Sep 17 00:00:00 2001 From: Julia Putko Date: Tue, 31 Aug 2021 17:24:05 -0700 Subject: [PATCH 47/63] adding fabm --- extern/fabm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extern/fabm b/extern/fabm index 378ae847..d938a3e2 160000 --- a/extern/fabm +++ b/extern/fabm @@ -1 +1 @@ -Subproject commit 378ae8476bc1586cd7b56b4b31025ad7bb934fef +Subproject commit d938a3e25ade729fe93d3fba496165badcea6b84 From ac8735f0c870e20eadc9f8dcdd23c24d20c5de5f Mon Sep 17 00:00:00 2001 From: Julia Putko Date: Tue, 31 Aug 2021 17:33:45 -0700 Subject: [PATCH 48/63] clean --- src/fabm/gotm_fabm.F90 | 37 +------------------------------------ 1 file changed, 1 insertion(+), 36 deletions(-) diff --git a/src/fabm/gotm_fabm.F90 b/src/fabm/gotm_fabm.F90 index 80088b73..8945afa3 100644 --- a/src/fabm/gotm_fabm.F90 +++ b/src/fabm/gotm_fabm.F90 @@ -108,23 +108,6 @@ module gotm_fabm - !declare fabm variables here? jpnote - !Yaml variables - ! -!logical :: use_icealgae - !logical :: no_precipitation_dilution - !REALTYPE :: r_pond,fmethod,fflush,drag,f_graze,zia,ac_ia,rnit,skno3_0,sknh4_0, & - ! sksil_0,ia_0,ia_b,ks_no3,ks_sil,maxg,mort,mort2,crit_melt,lcompp,rpp, & - ! t_sens,nu,md_no3,md_sil,chl2n,sil2n - - !REALTYPE :: ac,f_seed,ph1_0,ph2_0,zo1_0,zo2_0,no3_0,nh4_0,de1_0,de2_0,bsi_0,sil_0,w1,w2,mu1,mu2,kn,rpp1,rpp2,mp1,mp2,gz1,kz1,az1,az2,mz1,rc,pp1,pp2,pd1,pd2,pz1,gz2,kz2,mz2,rd1,rd2,rd3,rpf,rn0,knt,qp,qz,qb,agg,rsin,ks,pmin - !real(rk) :: drag,f_graze,zia,ac_ia,ia_0,ia_b,rnit,skno3_0,sknh4_0,sksil_0,ks_no3,ks_sil,maxg,mort,mort2,crit_melt,lcompp,rpp,rpi,t_sens,nu,md_no3,md_sil,chl2n,sil2n - ! REALTYPE:: dic_0, alk_0, dic_sw, alk_sw, dic_ice, alk_ice, ik_diff, ik_on, ice_on, IA_on, tplv, btlv, prop2sw, prop2sw_melt - - - - - ! Arrays for work, vertical movement, and cross-boundary fluxes REALTYPE,allocatable,dimension(:,:) :: ws REALTYPE,allocatable,dimension(:) :: sfl,bfl,Qsour,Lsour,DefaultRelaxTau,cc_old,curh,curnuh,iweights @@ -328,22 +311,6 @@ subroutine configure_gotm_fabm(cfg) default=-1, display=display_advanced) -!mortenson FABM VARS from gotm.yaml - -!gotm_fabm.nml jpnote some of these might be already existing settings --------- !but there isnt actually anywhere in the yaml where they are coming in from - !branch => cfg%get_child('gotm_fabm_nml', 'setting from the mortenson gotm_fabm.nml') !jpnote change label/how it's organized in the yaml? - !call branch%get(fabm_calc, 'fabm_calc', 'fabm_calc', default=.false.) - !call branch%get(cnpar, 'cnpar', 'cnpar','', default=1.0_rk) - !call branch%get(w_adv_discr, 'w_adv_discr', 'w_adv_discr','', default=6.0_rk) - !call branch%get(ode_method, 'ode_method', 'ode_method','', default=1.0_rk) - !call branch%get(split_factor, 'split_factor', 'split_factor','', default=1.0_rk) - !call branch%get(bioshade_feedback, 'bioshade_feedback', 'bioshade_feedback', default=.true.) - ! call branch%get(bioalbedo_feedback, 'bioalbedo_feedback', 'bioalbedo_feedback', default=.true.) - !call branch%get(biodrag_feedback, 'biodrag_feedback', 'biodrag_feedback', default=.true.) - !call branch%get(repair_state, 'repair_state', 'repair_state', default=.false.) - !call branch%get(salinity_relaxation_to_freshwater_flux, 'salinity_relaxation_to_freshwater_flux', 'salinity_relaxation_to_freshwater_flux', default=.false.) - !call branch%get(no_precipitation_dilution, 'no_precipitation_dilution', 'no_precipitation_dilution', default=.false.) - !call branch%get(save_inputs, 'save_inputs', 'save_inputs', default=.false.) LEVEL2 'done.' @@ -738,10 +705,8 @@ subroutine init_var_gotm_fabm(nlev) ! and link it to FABM. decimal_yearday = _ZERO_ call model%link_scalar(standard_variables%number_of_days_since_start_of_the_year,decimal_yearday) - call model%link_scalar(standard_variables%timestep,dt) - + call model%link_scalar(standard_variables%timestep,dt) !jpnote added - !jpnote added allocate(Qsour(0:nlev),stat=rc) if (rc /= 0) stop 'init_var_gotm_fabm(): Error allocating (Qsour)' From add99fd372ba4ef974d1b7f75e46a6c75ae7c9cc Mon Sep 17 00:00:00 2001 From: Julia Putko Date: Tue, 31 Aug 2021 17:35:10 -0700 Subject: [PATCH 49/63] adding fabm --- extern/fabm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extern/fabm b/extern/fabm index 54420326..c069e29d 160000 --- a/extern/fabm +++ b/extern/fabm @@ -1 +1 @@ -Subproject commit 544203261f1a9c45a203d7c4b77beb2cac870fba +Subproject commit c069e29db82da530d9e8abf1bd2d442572e67da4 From cfa77d9d8d6b61224e67ec7ae08604293ac245e5 Mon Sep 17 00:00:00 2001 From: Julia Putko Date: Thu, 7 Oct 2021 11:23:12 -0700 Subject: [PATCH 50/63] adding fabm --- extern/fabm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extern/fabm b/extern/fabm index c069e29d..eda64831 160000 --- a/extern/fabm +++ b/extern/fabm @@ -1 +1 @@ -Subproject commit c069e29db82da530d9e8abf1bd2d442572e67da4 +Subproject commit eda6483104f76297d38a583373252f63045f711e From 55f1185dc2312a8782321c7cf648a3dff7a84a4a Mon Sep 17 00:00:00 2001 From: Julia Putko Date: Sun, 10 Oct 2021 14:42:58 -0700 Subject: [PATCH 51/63] adding fabm --- extern/fabm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extern/fabm b/extern/fabm index eda64831..ca96b301 160000 --- a/extern/fabm +++ b/extern/fabm @@ -1 +1 @@ -Subproject commit eda6483104f76297d38a583373252f63045f711e +Subproject commit ca96b3019e7622d52c7fd867f42ec39bf5d64972 From b55b4a2b8daab6aef2734e57fd29ca881540009f Mon Sep 17 00:00:00 2001 From: Julia Putko Date: Sun, 10 Oct 2021 14:50:00 -0700 Subject: [PATCH 52/63] adding fabm --- extern/fabm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extern/fabm b/extern/fabm index ca96b301..17d5bc97 160000 --- a/extern/fabm +++ b/extern/fabm @@ -1 +1 @@ -Subproject commit ca96b3019e7622d52c7fd867f42ec39bf5d64972 +Subproject commit 17d5bc97fb096f8122b74cd7a6b8158194a6b014 From 6d083ed78cf8640a0784bb6bd4317342e66e9bc2 Mon Sep 17 00:00:00 2001 From: Julia Putko Date: Thu, 16 Dec 2021 02:47:24 -0800 Subject: [PATCH 53/63] changes in fabm and stim --- extern/fabm | 2 +- extern/stim | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/extern/fabm b/extern/fabm index 17d5bc97..9e7b2f94 160000 --- a/extern/fabm +++ b/extern/fabm @@ -1 +1 @@ -Subproject commit 17d5bc97fb096f8122b74cd7a6b8158194a6b014 +Subproject commit 9e7b2f94f47b68e1ab5d5b991545e4946eb0b010 diff --git a/extern/stim b/extern/stim index a8d2346f..eb7d7af9 160000 --- a/extern/stim +++ b/extern/stim @@ -1 +1 @@ -Subproject commit a8d2346f08b61012d4ba015eb5a9d3d1a86305df +Subproject commit eb7d7af97dc77c4b124f2ca8de5e69bd8b4c835e From 9815c713cc58a1f556eb7bb61efea2a52867c912 Mon Sep 17 00:00:00 2001 From: Julia Putko Date: Mon, 20 Dec 2021 17:20:10 -0800 Subject: [PATCH 54/63] adding extern/fabm,flexout/stim --- extern/fabm | 2 +- extern/flexout | 2 +- extern/stim | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/extern/fabm b/extern/fabm index 17d5bc97..9e7b2f94 160000 --- a/extern/fabm +++ b/extern/fabm @@ -1 +1 @@ -Subproject commit 17d5bc97fb096f8122b74cd7a6b8158194a6b014 +Subproject commit 9e7b2f94f47b68e1ab5d5b991545e4946eb0b010 diff --git a/extern/flexout b/extern/flexout index f129ad21..3da32b10 160000 --- a/extern/flexout +++ b/extern/flexout @@ -1 +1 @@ -Subproject commit f129ad2181576624ae929331388d0a69bc574f7f +Subproject commit 3da32b1063e1f5ddfce56edaedbc1b29674f4e84 diff --git a/extern/stim b/extern/stim index a8d2346f..bd929672 160000 --- a/extern/stim +++ b/extern/stim @@ -1 +1 @@ -Subproject commit a8d2346f08b61012d4ba015eb5a9d3d1a86305df +Subproject commit bd9296724cd2911eb30fc2ef6c9d17dd70b76a5c From 09169bc9d3aca387575347493577c88416ad9612 Mon Sep 17 00:00:00 2001 From: Julia Putko Date: Tue, 21 Dec 2021 13:23:42 -0800 Subject: [PATCH 55/63] adding fabm - dms changes --- extern/fabm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extern/fabm b/extern/fabm index 9e7b2f94..350c694d 160000 --- a/extern/fabm +++ b/extern/fabm @@ -1 +1 @@ -Subproject commit 9e7b2f94f47b68e1ab5d5b991545e4946eb0b010 +Subproject commit 350c694dac0a3e7ebf33a7e30ceebabe5e8e4e37 From 5d166ae82cba5014b3274b8c22c538f25a27710e Mon Sep 17 00:00:00 2001 From: Julia Putko Date: Tue, 21 Dec 2021 14:09:21 -0800 Subject: [PATCH 56/63] flexout --- extern/flexout | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extern/flexout b/extern/flexout index 3da32b10..4c141f25 160000 --- a/extern/flexout +++ b/extern/flexout @@ -1 +1 @@ -Subproject commit 3da32b1063e1f5ddfce56edaedbc1b29674f4e84 +Subproject commit 4c141f253dbc1e37657fbcf00be0c2da611f9ec0 From f25f6444fc0c73dfab4c3c597f009369db5daf1c Mon Sep 17 00:00:00 2001 From: Karsten Bolding Date: Mon, 7 Dec 2020 10:15:44 +0100 Subject: [PATCH 57/63] added changed from commit1 2015a027d621296bee2174bd0c8dd847f298e7fb --- src/airsea/airsea.F90 | 30 +++++++++++++++++------------- src/airsea/airsea_variables.F90 | 3 ++- src/airsea/longwave_radiation.F90 | 28 +++++++++++++++++++++++----- 3 files changed, 42 insertions(+), 19 deletions(-) diff --git a/src/airsea/airsea.F90 b/src/airsea/airsea.F90 index 34b0e832..d51b0227 100644 --- a/src/airsea/airsea.F90 +++ b/src/airsea/airsea.F90 @@ -65,6 +65,7 @@ module airsea_driver ! ! Meteorological forcing variables integer, public :: hum_method + integer, public :: longwave_type character(len=PATH_MAX) :: meteo_file type (type_scalar_input), public, target :: u10,v10 type (type_scalar_input), public, target :: airp,airt @@ -490,12 +491,18 @@ subroutine init_airsea_yaml() default=.false.) call branch%get(calc_evaporation, 'calc_evaporation', 'calculate evaporation from meteorological conditions', & default=.false.) - - call branch%get(I_0, 'swr', 'shortwave radiation', 'W/m^2', & - minimum=0._rk,default=0._rk, extra_options=(/option(3, 'from time, location and cloud cover', 'calculate')/)) - call branch%get(ql, 'longwave_radiation', 'net longwave radiation', 'W/m^2', & +!jpnote: before cherry pick -- keeping commented because unsure if removing I/0 does anything -- also should check yaml. + !call branch%get(I_0, 'swr', 'shortwave radiation', 'W/m^2', & + ! minimum=0._rk,default=0._rk, extra_options=(/option(3, 'from time, location and cloud cover', 'calculate')/)) + !call branch%get(ql, 'longwave_radiation', 'net longwave radiation', 'W/m^2', & + ! default=0._rk, method_file=0, method_constant=method_unsupported, & + !extra_options=(/option(CLARK, 'Clark et al. (1974)', 'Clark'), option(HASTENRATH_LAMB, 'Hastenrath and Lamb (1978)', 'Hastenrath_Lamb'), option(BIGNAMI, 'Bignami et al. (1995)', 'Bignami'), option(BERLIAND_BERLIAND, 'Berliand and Berliand (1952)', 'Berliand_Berliand'), option(JOSEY1, 'Josey et al. (2003) - 1', 'Josey1'), option(JOSEY2, 'Josey et al. (2003) - 2', 'Josey2')/), default_method=CLARK) +!jpnote: after cherry pick + call branch%get(ql, 'longwave_radiation', 'longwave radiation', 'W/m^2', & default=0._rk, method_file=0, method_constant=method_unsupported, & - extra_options=(/option(CLARK, 'Clark et al. (1974)', 'Clark'), option(HASTENRATH_LAMB, 'Hastenrath and Lamb (1978)', 'Hastenrath_Lamb'), option(BIGNAMI, 'Bignami et al. (1995)', 'Bignami'), option(BERLIAND_BERLIAND, 'Berliand and Berliand (1952)', 'Berliand_Berliand'), option(JOSEY1, 'Josey et al. (2003) - 1', 'Josey1'), option(JOSEY2, 'Josey et al. (2003) - 2', 'Josey2')/), default_method=CLARK) + extra_options=(/option(1, 'Clark'), option(2, 'Hastenrath'), option(3, 'Bignami'), option(4, 'Berliand'), option(5, 'Josey-1'), option(6, 'Josey-2')/), default_method=1, pchild=leaf) + call leaf%get(longwave_type, 'type', 'longwave type from file', & + options=(/option(1, 'net longwave radiation'), option(2, 'incoming longwave radiation')/), default=1) twig => branch%get_typed_child('albedo') call twig%get(albedo_method, 'method', 'method to compute albedo', & @@ -687,7 +694,7 @@ subroutine post_init_airsea(lat,lon) LEVEL4 'using Fairall et. all formulation' case default end select - LEVEL3 'net longwave radiation:' + LEVEL3 'longwave radiation:' select case (ql%method) case(0) ! Read from file instead of calculating call register_input(ql) @@ -1017,9 +1024,8 @@ subroutine flux_from_meteo(jul,secs) cloud1 = cloud2 call humidity(hum_method,hum,airp,tw,ta) - if (ql%method .gt. 0) then - call longwave_radiation(ql%method, & - dlat,tw_k,ta_k,cloud,ql) + call longwave_radiation(ql%method,longwave_type, & + dlat,tw_k,ta_k,cloud,ql%value) end if #if 0 call airsea_fluxes(fluxes_method,rain_impact,calc_evaporation, & @@ -1069,10 +1075,8 @@ subroutine flux_from_meteo(jul,secs) end if call humidity(hum_method,hum%value,airp%value,tw,ta) - if (ql%method .gt. 0) then - call longwave_radiation(ql%method, & - dlat,tw_k,ta_k,cloud%value,ql%value) - endif + call longwave_radiation(ql%method,longwave_type, & + dlat,tw_k,ta_k,cloud%value,ql%value) call airsea_fluxes(fluxes_method, & tw,ta,u10%value-ssu,v10%value-ssv,precip%value,evap,tx_%value,ty_%value,qe,qh) heat%value = (ql%value+qe+qh) diff --git a/src/airsea/airsea_variables.F90 b/src/airsea/airsea_variables.F90 index 813273a7..d53da035 100644 --- a/src/airsea/airsea_variables.F90 +++ b/src/airsea/airsea_variables.F90 @@ -23,7 +23,8 @@ module airsea_variables REALTYPE, public, parameter :: emiss=0.97 REALTYPE, public, parameter :: bolz=5.67e-8 REALTYPE, public, parameter :: kelvin=273.15 - REALTYPE, public, parameter :: const06=0.62198 + REALTYPE, public, parameter :: const06=0.62198 ! molecular weight ratio between water and dry air + ! 18.01528 g/mol H2O, 28.97 g/mol dry air REALTYPE, public, parameter :: rgas = 287.1 ! REALTYPE, public, parameter :: g = 9.81 ! [m/s2] REALTYPE, public, parameter :: rho_0 = 1025. ! [kg/m3] diff --git a/src/airsea/longwave_radiation.F90 b/src/airsea/longwave_radiation.F90 index cbf32712..cc33b6bc 100644 --- a/src/airsea/longwave_radiation.F90 +++ b/src/airsea/longwave_radiation.F90 @@ -5,13 +5,14 @@ ! !ROUTINE: Calculate the net longwave radiation \label{sec:back-rad} ! ! !INTERFACE: - subroutine longwave_radiation(method,dlat,tw,ta,cloud,ql) + subroutine longwave_radiation(method,type,dlat,tw,ta,cloud,ql) ! ! !DESCRIPTION: ! ! Here, the net longwave radiation is calculated by means of one out ! of six methods, which depend on the value given to the parameter ! {\tt method}: +! {\tt method}=0: read observations from a file ! {\tt method}=1: \cite{Clarketal74}, ! {\tt method}=2: \cite{HastenrathLamb78}, ! {\tt method}=3: \cite{Bignamietal95}, @@ -27,16 +28,25 @@ subroutine longwave_radiation(method,dlat,tw,ta,cloud,ql) IMPLICIT NONE ! ! !INPUT PARAMETERS: - integer, intent(in) :: method + integer, intent(in) :: method,type REALTYPE, intent(in) :: dlat,tw,ta,cloud ! ! !OUTPUT PARAMETERS: - REALTYPE, intent(out) :: ql + REALTYPE, intent(inout) :: ql ! ! !REVISION HISTORY: ! Original author(s): Adolf Stips, Hans Burchard & Karsten Bolding ! ! !LOCAL VARIABLES: +!cherry pick -- > jpnote to get rid of and add to airseavariables + integer, parameter :: from_file=0 + integer, parameter :: clark=1 ! Clark et al, 1974 + integer, parameter :: hastenrath=2 ! Hastenrath and Lamb, 1978 + integer, parameter :: bignami=3 ! Bignami et al., 1995 - Medsea + integer, parameter :: berliand=4 ! Berliand and Berliand, 1952 - ROMS + integer, parameter :: josey1=5 ! Josey 2003, (J1,9) + integer, parameter :: josey2=6 ! Josey 2003, (J2,14) + REALTYPE, parameter, dimension(91) :: cloud_correction_factor = (/ & 0.497202, 0.501885, 0.506568, 0.511250, 0.515933, & 0.520616, 0.525299, 0.529982, 0.534665, 0.539348, & @@ -60,7 +70,6 @@ subroutine longwave_radiation(method,dlat,tw,ta,cloud,ql) REALTYPE :: ccf REALTYPE :: x1,x2,x3 -! !EOP !----------------------------------------------------------------------- !BOC @@ -68,7 +77,16 @@ subroutine longwave_radiation(method,dlat,tw,ta,cloud,ql) ccf= cloud_correction_factor(nint(abs(dlat))+1) select case(method) - case(CLARK) + !before + !case(CLARK) + !after + case(from_file) + select case(type) + case(1) + case(2) + ql = ql-bolz*emiss*(tw**4) + end select + case(clark) ! Clark et al. (1974) formula. ! unit of ea is Pascal, must hPa ! Black body defect term, clouds, water vapor correction From 4db20075e2184e33a08dca6062d08675b1e9a028 Mon Sep 17 00:00:00 2001 From: Julia Putko Date: Tue, 21 Dec 2021 14:31:42 -0800 Subject: [PATCH 58/63] fabm --- extern/fabm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extern/fabm b/extern/fabm index 350c694d..717e63e3 160000 --- a/extern/fabm +++ b/extern/fabm @@ -1 +1 @@ -Subproject commit 350c694dac0a3e7ebf33a7e30ceebabe5e8e4e37 +Subproject commit 717e63e3f4922e0975d4eebb20af8998ee194d43 From 2590787c06f1da2ec9ac39b197efcac33a96568a Mon Sep 17 00:00:00 2001 From: Karsten Bolding Date: Wed, 27 Jan 2021 08:35:45 +0100 Subject: [PATCH 59/63] changes from commit 2 22dd70983da5d9e98ce2a1675fdfa8a7b --- src/airsea/airsea.F90 | 46 ++++++++++++++++------------- src/airsea/airsea_variables.F90 | 1 + src/airsea/longwave_radiation.F90 | 21 ++++++------- src/gotm/register_all_variables.F90 | 3 +- 4 files changed, 40 insertions(+), 31 deletions(-) diff --git a/src/airsea/airsea.F90 b/src/airsea/airsea.F90 index d51b0227..0bb9c2c0 100644 --- a/src/airsea/airsea.F90 +++ b/src/airsea/airsea.F90 @@ -77,10 +77,10 @@ module airsea_driver ! ! surface shortwave radiation ! and surface heat flux (W/m^2) - type (type_scalar_input), public, target :: I_0, ql + type (type_scalar_input), public, target :: I_0 REALTYPE, public, target :: albedo - type (type_scalar_input), public, target :: heat - REALTYPE, public :: qe,qh + type (type_scalar_input), public, target :: heat, ql_ + REALTYPE, public :: qe,qh,ql ! surface stress components (Pa) REALTYPE, public, target :: tx,ty @@ -342,7 +342,7 @@ subroutine init_airsea_nml(namlst, fn) call tx_%configure(method=momentum_method, path=momentumflux_file, index=1, constant_value=const_tx) call ty_%configure(method=momentum_method, path=momentumflux_file, index=2, constant_value=const_ty) call heat%configure(method=heat_method, path=heatflux_file, index=1, scale_factor=shf_factor, constant_value=const_heat) - call ql%configure(method=back_radiation_method, path=back_radiation_file, index=1) + call ql_%configure(method=back_radiation_method, path=back_radiation_file, index=1) call sst_obs%configure(method=sst_method, path=sst_file, index=1) call sss%configure(method=sss_method, path=sss_file, index=1) call precip%configure(method=precip_method, path=precip_file, index=1, scale_factor=precip_factor, constant_value=const_precip) @@ -491,19 +491,25 @@ subroutine init_airsea_yaml() default=.false.) call branch%get(calc_evaporation, 'calc_evaporation', 'calculate evaporation from meteorological conditions', & default=.false.) -!jpnote: before cherry pick -- keeping commented because unsure if removing I/0 does anything -- also should check yaml. - !call branch%get(I_0, 'swr', 'shortwave radiation', 'W/m^2', & - ! minimum=0._rk,default=0._rk, extra_options=(/option(3, 'from time, location and cloud cover', 'calculate')/)) + + !jpnote: before cherry pick + call branch%get(I_0, 'swr', 'shortwave radiation', 'W/m^2', & + minimum=0._rk,default=0._rk, extra_options=(/option(3, 'from time, location and cloud cover', 'calculate')/)) !call branch%get(ql, 'longwave_radiation', 'net longwave radiation', 'W/m^2', & ! default=0._rk, method_file=0, method_constant=method_unsupported, & !extra_options=(/option(CLARK, 'Clark et al. (1974)', 'Clark'), option(HASTENRATH_LAMB, 'Hastenrath and Lamb (1978)', 'Hastenrath_Lamb'), option(BIGNAMI, 'Bignami et al. (1995)', 'Bignami'), option(BERLIAND_BERLIAND, 'Berliand and Berliand (1952)', 'Berliand_Berliand'), option(JOSEY1, 'Josey et al. (2003) - 1', 'Josey1'), option(JOSEY2, 'Josey et al. (2003) - 2', 'Josey2')/), default_method=CLARK) -!jpnote: after cherry pick - call branch%get(ql, 'longwave_radiation', 'longwave radiation', 'W/m^2', & +!jpnote: after cherry pick 1 + !call branch%get(ql, 'longwave_radiation', 'longwave radiation', 'W/m^2', & + !call twig%get(ssuv_method, 'ssuv_method', 'wind treatment', & + !options=(/option(0, 'use absolute wind speed'), option(1, 'use wind speed relative to current velocity')/), default=1, display=display_advanced) +!jpnote: after cherry pick 2 + call branch%get(ql_, 'longwave_radiation', 'longwave radiation', 'W/m^2', & default=0._rk, method_file=0, method_constant=method_unsupported, & extra_options=(/option(1, 'Clark'), option(2, 'Hastenrath'), option(3, 'Bignami'), option(4, 'Berliand'), option(5, 'Josey-1'), option(6, 'Josey-2')/), default_method=1, pchild=leaf) call leaf%get(longwave_type, 'type', 'longwave type from file', & options=(/option(1, 'net longwave radiation'), option(2, 'incoming longwave radiation')/), default=1) + twig => branch%get_typed_child('albedo') call twig%get(albedo_method, 'method', 'method to compute albedo', & options=(/option(0, 'constant', 'constant'), option(PAYNE, 'Payne (1972)', 'Payne'), option(COGLEY, 'Cogley (1979)', 'Cogley')/), default=PAYNE) @@ -695,10 +701,10 @@ subroutine post_init_airsea(lat,lon) case default end select LEVEL3 'longwave radiation:' - select case (ql%method) + select case (ql_%method) case(0) ! Read from file instead of calculating - call register_input(ql) - case(CLARK) + call register_input(ql_) !jpnote commmit 2 change + case(1) LEVEL4 'using Clark formulation' case(HASTENRATH_LAMB) LEVEL4 'using Hastenrath formulation' @@ -799,10 +805,10 @@ subroutine surface_fluxes(surface_temp,sensible,latent,longwave_radiation) latent = qe #if 0 if (qe .lt. _ZERO_) then - STDERR 'Stefan# ',qh/qe +!KB STDERR 'Stefan# ',qh/qe end if #endif - longwave_radiation = ql%value + longwave_radiation = ql return end subroutine surface_fluxes !EOC @@ -1024,8 +1030,8 @@ subroutine flux_from_meteo(jul,secs) cloud1 = cloud2 call humidity(hum_method,hum,airp,tw,ta) - call longwave_radiation(ql%method,longwave_type, & - dlat,tw_k,ta_k,cloud,ql%value) + call longwave_radiation(ql_%method,longwave_type, & + dlat,tw_k,ta_k,cloud,ql_%value,ql) end if #if 0 call airsea_fluxes(fluxes_method,rain_impact,calc_evaporation, & @@ -1034,7 +1040,7 @@ subroutine flux_from_meteo(jul,secs) call airsea_fluxes(fluxes_method, & tw,ta,u10%value-ssu,v10%value-ssv,precip%value,evap,tx2,ty2,qe,qh) #endif - h2 = ql%value+qe+qh + h2 = ql+qe+qh cloud2 = cloud%value if (init_saved_vars) then @@ -1075,11 +1081,11 @@ subroutine flux_from_meteo(jul,secs) end if call humidity(hum_method,hum%value,airp%value,tw,ta) - call longwave_radiation(ql%method,longwave_type, & - dlat,tw_k,ta_k,cloud%value,ql%value) + call longwave_radiation(ql_%method,longwave_type, & + dlat,tw_k,ta_k,cloud%value,ql_%value,ql) call airsea_fluxes(fluxes_method, & tw,ta,u10%value-ssu,v10%value-ssv,precip%value,evap,tx_%value,ty_%value,qe,qh) - heat%value = (ql%value+qe+qh) + heat%value = (ql+qe+qh) #endif w = sqrt((u10%value-ssu)*(u10%value-ssu)+(v10%value-ssv)*(v10%value-ssv)) diff --git a/src/airsea/airsea_variables.F90 b/src/airsea/airsea_variables.F90 index d53da035..7773fa70 100644 --- a/src/airsea/airsea_variables.F90 +++ b/src/airsea/airsea_variables.F90 @@ -47,6 +47,7 @@ module airsea_variables integer, public, parameter :: COGLEY=2 ! Longwave radiation + integer, public, parameter :: FILE = 0 ! From file integer, public, parameter :: CLARK = 1 ! Clark et al, 1974 integer, public, parameter :: HASTENRATH_LAMB = 2 ! Hastenrath and Lamb, 1978 integer, public, parameter :: BIGNAMI = 3 ! Bignami et al., 1995 - Medsea diff --git a/src/airsea/longwave_radiation.F90 b/src/airsea/longwave_radiation.F90 index cc33b6bc..579a2430 100644 --- a/src/airsea/longwave_radiation.F90 +++ b/src/airsea/longwave_radiation.F90 @@ -5,7 +5,7 @@ ! !ROUTINE: Calculate the net longwave radiation \label{sec:back-rad} ! ! !INTERFACE: - subroutine longwave_radiation(method,type,dlat,tw,ta,cloud,ql) + subroutine longwave_radiation(method,type,dlat,tw,ta,cloud,qlobs,ql) ! ! !DESCRIPTION: ! @@ -29,7 +29,7 @@ subroutine longwave_radiation(method,type,dlat,tw,ta,cloud,ql) ! ! !INPUT PARAMETERS: integer, intent(in) :: method,type - REALTYPE, intent(in) :: dlat,tw,ta,cloud + REALTYPE, intent(in) :: dlat,tw,ta,cloud,qlobs ! ! !OUTPUT PARAMETERS: REALTYPE, intent(inout) :: ql @@ -39,13 +39,13 @@ subroutine longwave_radiation(method,type,dlat,tw,ta,cloud,ql) ! ! !LOCAL VARIABLES: !cherry pick -- > jpnote to get rid of and add to airseavariables - integer, parameter :: from_file=0 - integer, parameter :: clark=1 ! Clark et al, 1974 - integer, parameter :: hastenrath=2 ! Hastenrath and Lamb, 1978 - integer, parameter :: bignami=3 ! Bignami et al., 1995 - Medsea - integer, parameter :: berliand=4 ! Berliand and Berliand, 1952 - ROMS - integer, parameter :: josey1=5 ! Josey 2003, (J1,9) - integer, parameter :: josey2=6 ! Josey 2003, (J2,14) + !integer, parameter :: from_file=0 + !integer, parameter :: clark=1 ! Clark et al, 1974 + !integer, parameter :: hastenrath=2 ! Hastenrath and Lamb, 1978 + !integer, parameter :: bignami=3 ! Bignami et al., 1995 - Medsea + !integer, parameter :: berliand=4 ! Berliand and Berliand, 1952 - ROMS + !integer, parameter :: josey1=5 ! Josey 2003, (J1,9) + !integer, parameter :: josey2=6 ! Josey 2003, (J2,14) REALTYPE, parameter, dimension(91) :: cloud_correction_factor = (/ & 0.497202, 0.501885, 0.506568, 0.511250, 0.515933, & @@ -83,8 +83,9 @@ subroutine longwave_radiation(method,type,dlat,tw,ta,cloud,ql) case(from_file) select case(type) case(1) + ql=qlobs case(2) - ql = ql-bolz*emiss*(tw**4) + ql = qlobs-bolz*emiss*(tw**4) end select case(clark) ! Clark et al. (1974) formula. diff --git a/src/gotm/register_all_variables.F90 b/src/gotm/register_all_variables.F90 index 62711e54..44185e96 100644 --- a/src/gotm/register_all_variables.F90 +++ b/src/gotm/register_all_variables.F90 @@ -162,7 +162,8 @@ subroutine register_airsea_variables(nlev) call fm%register('I_0', 'W/m2', 'incoming short wave radiation', standard_name='', data0d=I_0%value, category='surface/heat_fluxes') call fm%register('qh', 'W/m2', 'sensible heat flux', standard_name='', data0d=qh, category='surface/heat_fluxes') call fm%register('qe', 'W/m2', 'latent heat flux', standard_name='', data0d=qe, category='surface/heat_fluxes') - call fm%register('ql', 'W/m2', 'net longwave radiation', standard_name='', data0d=ql%value, category='surface/heat_fluxes') + call fm%register('ql', 'W/m2', 'net longwave radiation', standard_name='', data0d=ql, category='surface/heat_fluxes') + call fm%register('qlobs', 'W/m2', 'longwave radiation (obs)', standard_name='', data0d=ql_%value, category='surface/heat_fluxes') call fm%register('heat', 'W/m2', 'net surface heat flux', standard_name='', data0d=heat%value, category='surface/heat_fluxes') call fm%register('tx', 'm2/s2', 'wind stress (x)', standard_name='', data0d=tx, category='surface') call fm%register('ty', 'm2/s2', 'wind stress (y)', standard_name='', data0d=ty, category='surface') From 95dc0967aaf6d96a104bfa41b6b4d6da51ea2811 Mon Sep 17 00:00:00 2001 From: Julia Putko Date: Tue, 21 Dec 2021 15:19:48 -0800 Subject: [PATCH 60/63] additional changes regarding longwave: FILE, ql_ --- src/airsea/airsea.F90 | 8 +++++--- src/airsea/longwave_radiation.F90 | 6 +++--- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/airsea/airsea.F90 b/src/airsea/airsea.F90 index 0bb9c2c0..af4f8d75 100644 --- a/src/airsea/airsea.F90 +++ b/src/airsea/airsea.F90 @@ -775,9 +775,11 @@ subroutine surface_fluxes_uvic(surface_temp,sensible,latent,longwave_radiation_v ! call humidity(hum_method,rh,airp,TTss-kelvin,airt) call humidity(hum_method,hum%value,airp%value,tw,airt%value) ! call longwave_radiation(longwave_radiation_method, & - ! lat,TTss,airt+kelvin,cloud,qb) - call longwave_radiation(ql%method, & - dlat,tw_k,ta_k,cloud%value,longwave_radiation_value) + ! lat,TTss,airt+kelvin,cloud,qb) + call longwave_radiation(ql_%method,longwave_type, & + dlat,tw_k,ta_k,cloud%value,ql_%value,longwave_radiation_value) + !call longwave_radiation(ql%method, & + ! dlat,tw_k,ta_k,cloud%value,longwave_radiation_value) !call airsea_fluxes(fluxes_method, & !TTss-kelvin,airt,u10,v10,precip,evap,tx,ty,qe,qh) call airsea_fluxes(fluxes_method, & diff --git a/src/airsea/longwave_radiation.F90 b/src/airsea/longwave_radiation.F90 index 579a2430..c98e086f 100644 --- a/src/airsea/longwave_radiation.F90 +++ b/src/airsea/longwave_radiation.F90 @@ -24,7 +24,7 @@ subroutine longwave_radiation(method,type,dlat,tw,ta,cloud,qlobs,ql) ! !USES: use airsea_variables, only: emiss,bolz use airsea_variables, only: ea,qa - use airsea_variables, only: CLARK, HASTENRATH_LAMB, BIGNAMI, BERLIAND_BERLIAND, JOSEY1, JOSEY2 + use airsea_variables, only: FILE, CLARK, HASTENRATH_LAMB, BIGNAMI, BERLIAND_BERLIAND, JOSEY1, JOSEY2 IMPLICIT NONE ! ! !INPUT PARAMETERS: @@ -80,14 +80,14 @@ subroutine longwave_radiation(method,type,dlat,tw,ta,cloud,qlobs,ql) !before !case(CLARK) !after - case(from_file) + case(FILE) select case(type) case(1) ql=qlobs case(2) ql = qlobs-bolz*emiss*(tw**4) end select - case(clark) + case(CLARK) ! Clark et al. (1974) formula. ! unit of ea is Pascal, must hPa ! Black body defect term, clouds, water vapor correction From 60131b1f9c6be549402798ecad85b0f2a31bc807 Mon Sep 17 00:00:00 2001 From: Julia Putko Date: Wed, 22 Dec 2021 15:58:05 -0800 Subject: [PATCH 61/63] adding case(clark) and fatal error message 93, removing comments --- src/airsea/airsea.F90 | 26 ++++++-------------------- src/airsea/longwave_radiation.F90 | 12 ------------ 2 files changed, 6 insertions(+), 32 deletions(-) diff --git a/src/airsea/airsea.F90 b/src/airsea/airsea.F90 index af4f8d75..406f0d4c 100644 --- a/src/airsea/airsea.F90 +++ b/src/airsea/airsea.F90 @@ -356,6 +356,8 @@ subroutine init_airsea_nml(namlst, fn) stop 'init_airsea' 91 FATAL 'I could not read airsea namelist' stop 'init_airsea' +93 FATAL 'I could not open ',trim(meteo_file) + stop 'init_airsea' end subroutine init_airsea_nml !EOC @@ -492,20 +494,11 @@ subroutine init_airsea_yaml() call branch%get(calc_evaporation, 'calc_evaporation', 'calculate evaporation from meteorological conditions', & default=.false.) - !jpnote: before cherry pick call branch%get(I_0, 'swr', 'shortwave radiation', 'W/m^2', & minimum=0._rk,default=0._rk, extra_options=(/option(3, 'from time, location and cloud cover', 'calculate')/)) - !call branch%get(ql, 'longwave_radiation', 'net longwave radiation', 'W/m^2', & - ! default=0._rk, method_file=0, method_constant=method_unsupported, & - !extra_options=(/option(CLARK, 'Clark et al. (1974)', 'Clark'), option(HASTENRATH_LAMB, 'Hastenrath and Lamb (1978)', 'Hastenrath_Lamb'), option(BIGNAMI, 'Bignami et al. (1995)', 'Bignami'), option(BERLIAND_BERLIAND, 'Berliand and Berliand (1952)', 'Berliand_Berliand'), option(JOSEY1, 'Josey et al. (2003) - 1', 'Josey1'), option(JOSEY2, 'Josey et al. (2003) - 2', 'Josey2')/), default_method=CLARK) -!jpnote: after cherry pick 1 - !call branch%get(ql, 'longwave_radiation', 'longwave radiation', 'W/m^2', & - !call twig%get(ssuv_method, 'ssuv_method', 'wind treatment', & - !options=(/option(0, 'use absolute wind speed'), option(1, 'use wind speed relative to current velocity')/), default=1, display=display_advanced) -!jpnote: after cherry pick 2 call branch%get(ql_, 'longwave_radiation', 'longwave radiation', 'W/m^2', & default=0._rk, method_file=0, method_constant=method_unsupported, & - extra_options=(/option(1, 'Clark'), option(2, 'Hastenrath'), option(3, 'Bignami'), option(4, 'Berliand'), option(5, 'Josey-1'), option(6, 'Josey-2')/), default_method=1, pchild=leaf) + extra_options=(/option(CLARK, 'Clark et al. (1974)', 'Clark'), option(HASTENRATH_LAMB, 'Hastenrath and Lamb (1978)', 'Hastenrath_Lamb'), option(BIGNAMI, 'Bignami et al. (1995)', 'Bignami'), option(BERLIAND_BERLIAND, 'Berliand and Berliand (1952)', 'Berliand_Berliand'), option(JOSEY1, 'Josey et al. (2003) - 1', 'Josey1'), option(JOSEY2, 'Josey et al. (2003) - 2', 'Josey2')/), default_method=CLARK, pchild=leaf) call leaf%get(longwave_type, 'type', 'longwave type from file', & options=(/option(1, 'net longwave radiation'), option(2, 'incoming longwave radiation')/), default=1) @@ -703,8 +696,8 @@ subroutine post_init_airsea(lat,lon) LEVEL3 'longwave radiation:' select case (ql_%method) case(0) ! Read from file instead of calculating - call register_input(ql_) !jpnote commmit 2 change - case(1) + call register_input(ql_) + case(CLARK) LEVEL4 'using Clark formulation' case(HASTENRATH_LAMB) LEVEL4 'using Hastenrath formulation' @@ -772,16 +765,9 @@ subroutine surface_fluxes_uvic(surface_temp,sensible,latent,longwave_radiation_v tw_k= surface_temp ta_k = airt%value + KELVIN - ! call humidity(hum_method,rh,airp,TTss-kelvin,airt) call humidity(hum_method,hum%value,airp%value,tw,airt%value) - ! call longwave_radiation(longwave_radiation_method, & - ! lat,TTss,airt+kelvin,cloud,qb) call longwave_radiation(ql_%method,longwave_type, & dlat,tw_k,ta_k,cloud%value,ql_%value,longwave_radiation_value) - !call longwave_radiation(ql%method, & - ! dlat,tw_k,ta_k,cloud%value,longwave_radiation_value) - !call airsea_fluxes(fluxes_method, & - !TTss-kelvin,airt,u10,v10,precip,evap,tx,ty,qe,qh) call airsea_fluxes(fluxes_method, & tw,airt%value,u10%value,v10%value,precip%value,evap,tx_%value,ty_%value,latent,sensible) @@ -1034,7 +1020,7 @@ subroutine flux_from_meteo(jul,secs) call humidity(hum_method,hum,airp,tw,ta) call longwave_radiation(ql_%method,longwave_type, & dlat,tw_k,ta_k,cloud,ql_%value,ql) - end if + ! end if #if 0 call airsea_fluxes(fluxes_method,rain_impact,calc_evaporation, & tw,ta,u10%value-ssu,v10%value-ssv,precip%value,evap,tx2,ty2,qe,qh) diff --git a/src/airsea/longwave_radiation.F90 b/src/airsea/longwave_radiation.F90 index c98e086f..c99cb372 100644 --- a/src/airsea/longwave_radiation.F90 +++ b/src/airsea/longwave_radiation.F90 @@ -38,15 +38,6 @@ subroutine longwave_radiation(method,type,dlat,tw,ta,cloud,qlobs,ql) ! Original author(s): Adolf Stips, Hans Burchard & Karsten Bolding ! ! !LOCAL VARIABLES: -!cherry pick -- > jpnote to get rid of and add to airseavariables - !integer, parameter :: from_file=0 - !integer, parameter :: clark=1 ! Clark et al, 1974 - !integer, parameter :: hastenrath=2 ! Hastenrath and Lamb, 1978 - !integer, parameter :: bignami=3 ! Bignami et al., 1995 - Medsea - !integer, parameter :: berliand=4 ! Berliand and Berliand, 1952 - ROMS - !integer, parameter :: josey1=5 ! Josey 2003, (J1,9) - !integer, parameter :: josey2=6 ! Josey 2003, (J2,14) - REALTYPE, parameter, dimension(91) :: cloud_correction_factor = (/ & 0.497202, 0.501885, 0.506568, 0.511250, 0.515933, & 0.520616, 0.525299, 0.529982, 0.534665, 0.539348, & @@ -77,9 +68,6 @@ subroutine longwave_radiation(method,type,dlat,tw,ta,cloud,qlobs,ql) ccf= cloud_correction_factor(nint(abs(dlat))+1) select case(method) - !before - !case(CLARK) - !after case(FILE) select case(type) case(1) From 182f9b9b375876d1b693ee89f94974d62894e4ba Mon Sep 17 00:00:00 2001 From: Julia Putko Date: Wed, 22 Dec 2021 16:44:20 -0800 Subject: [PATCH 62/63] adding stim --- extern/stim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extern/stim b/extern/stim index bd929672..2c317831 160000 --- a/extern/stim +++ b/extern/stim @@ -1 +1 @@ -Subproject commit bd9296724cd2911eb30fc2ef6c9d17dd70b76a5c +Subproject commit 2c3178311a07a4d4132ebbde59c4f6e669ff0f80 From 24689aa99a55634c7840a81347fb423fcda2b9e1 Mon Sep 17 00:00:00 2001 From: Julia Putko Date: Thu, 30 Dec 2021 12:28:20 -0800 Subject: [PATCH 63/63] indentation correction --- src/airsea/airsea.F90 | 12 ++++++------ src/airsea/longwave_radiation.F90 | 16 ++++++++-------- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/src/airsea/airsea.F90 b/src/airsea/airsea.F90 index 406f0d4c..748d87aa 100644 --- a/src/airsea/airsea.F90 +++ b/src/airsea/airsea.F90 @@ -264,7 +264,7 @@ subroutine init_airsea_nml(namlst, fn) REALTYPE :: const_tx,const_ty REALTYPE :: const_precip REALTYPE :: precip_factor - integer :: back_radiation_method + integer :: back_radiation_method integer :: heat_method namelist /airsea/ calc_fluxes, & @@ -498,9 +498,9 @@ subroutine init_airsea_yaml() minimum=0._rk,default=0._rk, extra_options=(/option(3, 'from time, location and cloud cover', 'calculate')/)) call branch%get(ql_, 'longwave_radiation', 'longwave radiation', 'W/m^2', & default=0._rk, method_file=0, method_constant=method_unsupported, & - extra_options=(/option(CLARK, 'Clark et al. (1974)', 'Clark'), option(HASTENRATH_LAMB, 'Hastenrath and Lamb (1978)', 'Hastenrath_Lamb'), option(BIGNAMI, 'Bignami et al. (1995)', 'Bignami'), option(BERLIAND_BERLIAND, 'Berliand and Berliand (1952)', 'Berliand_Berliand'), option(JOSEY1, 'Josey et al. (2003) - 1', 'Josey1'), option(JOSEY2, 'Josey et al. (2003) - 2', 'Josey2')/), default_method=CLARK, pchild=leaf) + extra_options=(/option(CLARK, 'Clark et al. (1974)', 'Clark'), option(HASTENRATH_LAMB, 'Hastenrath and Lamb (1978)', 'Hastenrath_Lamb'), option(BIGNAMI, 'Bignami et al. (1995)', 'Bignami'), option(BERLIAND_BERLIAND, 'Berliand and Berliand (1952)', 'Berliand_Berliand'), option(JOSEY1, 'Josey et al. (2003) - 1', 'Josey1'), option(JOSEY2, 'Josey et al. (2003) - 2', 'Josey2')/), default_method=CLARK, pchild=leaf) call leaf%get(longwave_type, 'type', 'longwave type from file', & - options=(/option(1, 'net longwave radiation'), option(2, 'incoming longwave radiation')/), default=1) + options=(/option(1, 'net longwave radiation'), option(2, 'incoming longwave radiation')/), default=1) twig => branch%get_typed_child('albedo') @@ -696,7 +696,7 @@ subroutine post_init_airsea(lat,lon) LEVEL3 'longwave radiation:' select case (ql_%method) case(0) ! Read from file instead of calculating - call register_input(ql_) + call register_input(ql_) case(CLARK) LEVEL4 'using Clark formulation' case(HASTENRATH_LAMB) @@ -767,7 +767,7 @@ subroutine surface_fluxes_uvic(surface_temp,sensible,latent,longwave_radiation_v call humidity(hum_method,hum%value,airp%value,tw,airt%value) call longwave_radiation(ql_%method,longwave_type, & - dlat,tw_k,ta_k,cloud%value,ql_%value,longwave_radiation_value) + dlat,tw_k,ta_k,cloud%value,ql_%value,longwave_radiation_value) call airsea_fluxes(fluxes_method, & tw,airt%value,u10%value,v10%value,precip%value,evap,tx_%value,ty_%value,latent,sensible) @@ -1020,7 +1020,7 @@ subroutine flux_from_meteo(jul,secs) call humidity(hum_method,hum,airp,tw,ta) call longwave_radiation(ql_%method,longwave_type, & dlat,tw_k,ta_k,cloud,ql_%value,ql) - ! end if + #if 0 call airsea_fluxes(fluxes_method,rain_impact,calc_evaporation, & tw,ta,u10%value-ssu,v10%value-ssv,precip%value,evap,tx2,ty2,qe,qh) diff --git a/src/airsea/longwave_radiation.F90 b/src/airsea/longwave_radiation.F90 index c99cb372..02e96e29 100644 --- a/src/airsea/longwave_radiation.F90 +++ b/src/airsea/longwave_radiation.F90 @@ -68,14 +68,14 @@ subroutine longwave_radiation(method,type,dlat,tw,ta,cloud,qlobs,ql) ccf= cloud_correction_factor(nint(abs(dlat))+1) select case(method) - case(FILE) - select case(type) - case(1) - ql=qlobs - case(2) - ql = qlobs-bolz*emiss*(tw**4) - end select - case(CLARK) + case(FILE) + select case(type) + case(1) + ql=qlobs + case(2) + ql = qlobs-bolz*emiss*(tw**4) + end select + case(CLARK) ! Clark et al. (1974) formula. ! unit of ea is Pascal, must hPa ! Black body defect term, clouds, water vapor correction