{"action":"created","issue":{"url":"https://api.github.com/repos/StrikeNP/trac_test/issues/486","repository_url":"https://api.github.com/repos/StrikeNP/trac_test","labels_url":"https://api.github.com/repos/StrikeNP/trac_test/issues/486/labels{/name}","comments_url":"https://api.github.com/repos/StrikeNP/trac_test/issues/486/comments","events_url":"https://api.github.com/repos/StrikeNP/trac_test/issues/486/events","html_url":"https://github.com/StrikeNP/trac_test/issues/486","id":332177630,"node_id":"MDU6SXNzdWUzMzIxNzc2MzA=","number":486,"title":"Modifying cloud_feedback forcings to match Peter Blossey's SAM simulations (Trac #486)","user":{"login":"StrikeNP","id":2577059,"node_id":"MDQ6VXNlcjI1NzcwNTk=","avatar_url":"https://avatars0.githubusercontent.com/u/2577059?v=4","gravatar_id":"","url":"https://api.github.com/users/StrikeNP","html_url":"https://github.com/StrikeNP","followers_url":"https://api.github.com/users/StrikeNP/followers","following_url":"https://api.github.com/users/StrikeNP/following{/other_user}","gists_url":"https://api.github.com/users/StrikeNP/gists{/gist_id}","starred_url":"https://api.github.com/users/StrikeNP/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/StrikeNP/subscriptions","organizations_url":"https://api.github.com/users/StrikeNP/orgs","repos_url":"https://api.github.com/users/StrikeNP/repos","events_url":"https://api.github.com/users/StrikeNP/events{/privacy}","received_events_url":"https://api.github.com/users/StrikeNP/received_events","type":"User","site_admin":false},"labels":[{"id":963997231,"node_id":"MDU6TGFiZWw5NjM5OTcyMzE=","url":"https://api.github.com/repos/StrikeNP/trac_test/labels/Migrated%20from%20Trac","name":"Migrated from Trac","color":"FFFFFF","default":false},{"id":963997516,"node_id":"MDU6TGFiZWw5NjM5OTc1MTY=","url":"https://api.github.com/repos/StrikeNP/trac_test/labels/clubb_src","name":"clubb_src","color":"FFFFFF","default":false},{"id":963998767,"node_id":"MDU6TGFiZWw5NjM5OTg3Njc=","url":"https://api.github.com/repos/StrikeNP/trac_test/labels/meyern@uwm.edu","name":"meyern@uwm.edu","color":"FFFFFF","default":false},{"id":963997380,"node_id":"MDU6TGFiZWw5NjM5OTczODA=","url":"https://api.github.com/repos/StrikeNP/trac_test/labels/task","name":"task","color":"FFFFFF","default":false}],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":8,"created_at":"2018-06-13T21:51:08Z","updated_at":"2018-06-15T04:52:11Z","closed_at":null,"author_association":"OWNER","body":"Peter Blossey has given us high-resolution SAM simulations of the cloud_feedback (CGILS) cases (ticket:485).  If we want to compare this output with CLUBB in an apples-to-apples way, then we would need to change the forcing of CLUBB such that it matches what Peter did in SAM.  However, it looks like the code changes are extensive, and so I'm not sure that it's worth the effort.  For now, let's just figure out what we'd need to change and estimate how long it would take.\n\nPeter's 23 Jan 2012 email describing the forcings of his simulations is listed here (the attachments to his email are attached to this ticket):\n\n\n```text\n\"Here's a description of the grid stretching, nudging, simplified \nsurface flux specification and (all the way at the bottom) one-way\n moisture nudging for S12.  Notes:\n\n - the surface flux formula embeds the dependence on the wind speed\n and vertical grid spacing at the surface into a single coefficient.\n - the one-way moisture nudging prevents spurious drying of the\n above-inversion air by the large-scale horizontal advection (which\n applies dry advection up to 900 hPa, even though the inversion\n doesn't usually reach that height).  To counter this, additional\n nudging is applied only when the moisture falls below values\n characteristic of the reference profiles in the lower free\n troposphere.\n\nLast, the cloud droplet effective radius for the radiation scheme\n should be 1.03 times the volume mean radius, which corresponds to\n our assumption that the geometric standard deviation, sigma_g =\n 1.2.\n\nLet me know if you need anything else.  Apologies for the long\n email.  I should have made a webpage...\n\n - Peter\n\n---------- Forwarded message ----------\nDear Adrian,  (cc: CGILS)\n\nHere is a summary of the surface flux scheme and vertical grids:\n\n  - S6: dx=dy=100m, dz=40m up to 4km.  \n    Nudge T, q above 4km.\n    Surface flux coeff: cT = c_q*U_spd = 0.0081, corresponds to z_low = 20m,\n\n  - S11: dx=dy=50m, dz=25m at surface, dz=5m from 500-1800m.  \n    Nudge T, q above 2.5km.\n    Surface flux coeff: cT = c_q*U_spd = 0.0081\n\n  - S12: dx=dy=25m, dz=15m at surface, dz=5m from 200-900m.\n    Nudge T, q above 1200 m.  Additional q nudging below 1200m if q<q_floor.\n    Surface flux coeff: cT = c_q*U_spd = 0.0104.\n\nModified versions of Irina's grid scheme for the transition cases\n are attached for the s11 and s12 cases.  These give Nz=320 for S11\n and Nz=192 for S12.  The surface flux scheme is described more\n fully below.\n\nI will attempt to put together a webpage or pdf document that\n summarizes the LES setup for these cases in full, so that it's all\n in one place that you can refer to as necessary.\n\nI hope that this is helpful.\n\n - Peter\n\nPS  Please let me know if you see any issues with the fortran files\n or otherwise.  Thanks also go to Irina for putting the grid\n generation program together.\n\n#===============================\nSummary of simplified surface flux scheme:\n\nThe simplified surface flux formulation (following Chris's\n suggestion and here\n recounting his earlier email), written in terms of fluxes of dry\n static energy and moisture, is:\n\n w's' = cT*( Cp*SST - s(1) )\n w'q' = cT*( 0.98*qsat(psurf,SST) - q(1) )\n\nwhere s(1) and q(1) are values of s,q at the lowest model level, Cp\n is\n the specific heat of dry air, and qsat(psurf,SST) is the saturation\n specific humidity at the surface pressure and sea surface\n temperature.\n The transfer coefficient cT is taken to be the same for humidity\n and dry static energy (or whatever your energy/temperature variable\n is) and can be computed as:\n\n cT = c_q * Uspd\n\nwhere Uspd is the surface windspeed and c_q is a nondimensional bulk\ntransfer coefficient.\n\nOne advantage of this formulation is that we can take Uspd from\nMinghua's case specification, so that inter-model variation in \n surface winds due to the details of nudging or subgrid schemes won't\n feed back onto surface fluxes.  One disadvantage is that c_q\n depends on the height of the lowest model level.  However, we can\n account for its variation because \n c_q ~ kappa^2/log(z(1)/z0)/log(z(1)/zt) where kappa\nis the von Karman constant and z0/zt are roughness lengths.  This\ngives:\n\n        z(1)     c_q(z)/c_q(10)  c_q(z)*1e3\n        2.50          1.29          1.55\n        5.00          1.13          1.36\n        7.50          1.05          1.26\n       10.00          1.00          1.20\n       12.50          0.96          1.15\n       15.00          0.93          1.12\n       17.50          0.91          1.09\n       20.00          0.89          1.07\n\nFirst column: height of center of lowest grid level.\nSecond column: scaling factor for c_q relative to 10m height.\nThird column: c_q for each height * 1e3.\n\nThis suggests that c_q=0.0012 works pretty well for a 12.5m lowest\nlevel (as we used in s11), but won't work as well for a 2.5m (s12)\n or 20m (s6) lowest level.  In addition, the winds are stronger in\n s6 and s12 than s11.  Ideally, this would suggest:\n\n  case   zlow     c_q       Uspd    cT=c_q*Uspd\n    s6      20       1.07       7.88     0.0084\n    s11    12.5    1.15       6.75     0.0078\n    s11    2.5      1.55       6.75     0.0105  (s11 w/fine grid\n              near surface -- optional resolution sensitivity study)\n    s12    2.5      1.55       8.27     0.0128\n\nNow, in the last round, we used 0.0081 for cT in s11.  I would \n suggest that we continue to use this value at both s11 and s6,\n because the resulting errors are small and can be viewed as an\n uncertainty with respect to the uncertain surface windspeed at\n these locations.  So the recommendation for the current round of\n simulations are above.\n\n\n#===========================\nSpecification Details:\n\n - ALL: for the radiation, use the zenith angle from Minghua's spec\n for each case and then adjust the solar constant and eccentricity\n so that the top-of-atmosphere insolation matches Minghua's spec.  I\n usually fix the eccentricity to one and adjust the solar constant\n as necessary.\n - ALL: for the winds, I would ask that the mean winds be nudged to\n the sounding winds on a ten minute timescale and that the coriolis\n terms be switched off.\n\n - The setup for S6 should be as before.\n - For S11, use 5m vertical resolution through the cloud and\n inversion layers -- in SAM, this means about 500-1800m.  Given the\n length of the runs, it's probably better to error on the side of\n using more levels than less.\n - For S12, run as before but with additional nudging of the\n specific humidity if it falls below the value, q_floor = q(p=875\n hPa).  This means q_floor = 0.003581839 kg/kg for ctl_12 and\n 0.004095861 kg/kg for p2k_12.  Since the free tropospheric relative\n humidity is identical for ctl and p2k, this is a climate-invariant\n setup.  The setup for the q nudging is as follows.\n\nThe qt nudging should be done at levels up to 1200m where the mean\n value of qt falls below qt_floor=xxx g/kg (see above for values). \n A horizontally-uniform nudging should be applied that nudges the\n mean qt back to qt_floor on a one hour timescale.  This prevents\n the excessive drying of the free troposphere just above the\n inversion.  The code in SAM is as follows:\n\n!bloss: option for CGILS cases to avoid over-drying of sounding\n above BL                                                                                                   \n\nif(doenforce_cgils_qfloor) then                                                                                                                                            \n  do k = 1,nzm                                                                                                                                                             \n    if((z(k).lt.ztop_qfloor).AND.(q0(k).lt.qfloor)) then                                                                                                                   \n      dqdt_qfloor = (qfloor-q0(k))/tau_qfloor                                                                                                                              \n      qnudge(k) = qnudge(k) + dqdt_qfloor                                                                                                                                  \n      do j=1,ny                                                                                                                                                            \n        do i=1,nx                                                                                                                                                          \n          micro_field(i,j,k,index_water_vapor) &                                                                                                                           \n               = micro_field(i,j,k,index_water_vapor) + dtn*dqdt_qfloor                                                                                                    \n        end do                                                                                                                                                             \n      end do                                                                                                                                                               \n    end if                                                                                                                                                                 \n  end do                                                                                                                                                                   \nend if                                                                                                                                                                     \n\nwhere q0(k) is the mean value of qt at level k, dtn is the timestep. \n We use value of :\n\nqfloor = 0.0035    ! kg/kg\nztop_qfloor = 1200.  ! meters\ntau_qfloor = 3600.  ! seconds\"\n```\n\nAttachments:\n\n[zgrid.s11stretch.f](https://github.com/larson-group/trac_attachment_archive/blob/master/clubb/zgrid.s11stretch.f)\n[zgrid.s12stretch.f](https://github.com/larson-group/trac_attachment_archive/blob/master/clubb/zgrid.s12stretch.f)\n\nMigrated from http://carson.math.uwm.edu/trac/clubb/ticket/486\n```json\n{\n    \"status\": \"closed\", \n    \"changetime\": \"2012-02-23T17:30:56\", \n    \"description\": \"Peter Blossey has given us high-resolution SAM simulations of the cloud_feedback (CGILS) cases (ticket:485).  If we want to compare this output with CLUBB in an apples-to-apples way, then we would need to change the forcing of CLUBB such that it matches what Peter did in SAM.  However, it looks like the code changes are extensive, and so I'm not sure that it's worth the effort.  For now, let's just figure out what we'd need to change and estimate how long it would take.\\n\\nPeter's 23 Jan 2012 email describing the forcings of his simulations is listed here (the attachments to his email are attached to this ticket):\\n\\n{{{\\n\\\"Here's a description of the grid stretching, nudging, simplified \\nsurface flux specification and (all the way at the bottom) one-way\\n moisture nudging for S12.  Notes:\\n\\n - the surface flux formula embeds the dependence on the wind speed\\n and vertical grid spacing at the surface into a single coefficient.\\n - the one-way moisture nudging prevents spurious drying of the\\n above-inversion air by the large-scale horizontal advection (which\\n applies dry advection up to 900 hPa, even though the inversion\\n doesn't usually reach that height).  To counter this, additional\\n nudging is applied only when the moisture falls below values\\n characteristic of the reference profiles in the lower free\\n troposphere.\\n\\nLast, the cloud droplet effective radius for the radiation scheme\\n should be 1.03 times the volume mean radius, which corresponds to\\n our assumption that the geometric standard deviation, sigma_g =\\n 1.2.\\n\\nLet me know if you need anything else.  Apologies for the long\\n email.  I should have made a webpage...\\n\\n - Peter\\n\\n---------- Forwarded message ----------\\nDear Adrian,  (cc: CGILS)\\n\\nHere is a summary of the surface flux scheme and vertical grids:\\n\\n  - S6: dx=dy=100m, dz=40m up to 4km.  \\n    Nudge T, q above 4km.\\n    Surface flux coeff: cT = c_q*U_spd = 0.0081, corresponds to z_low = 20m,\\n\\n  - S11: dx=dy=50m, dz=25m at surface, dz=5m from 500-1800m.  \\n    Nudge T, q above 2.5km.\\n    Surface flux coeff: cT = c_q*U_spd = 0.0081\\n\\n  - S12: dx=dy=25m, dz=15m at surface, dz=5m from 200-900m.\\n    Nudge T, q above 1200 m.  Additional q nudging below 1200m if q<q_floor.\\n    Surface flux coeff: cT = c_q*U_spd = 0.0104.\\n\\nModified versions of Irina's grid scheme for the transition cases\\n are attached for the s11 and s12 cases.  These give Nz=320 for S11\\n and Nz=192 for S12.  The surface flux scheme is described more\\n fully below.\\n\\nI will attempt to put together a webpage or pdf document that\\n summarizes the LES setup for these cases in full, so that it's all\\n in one place that you can refer to as necessary.\\n\\nI hope that this is helpful.\\n\\n - Peter\\n\\nPS  Please let me know if you see any issues with the fortran files\\n or otherwise.  Thanks also go to Irina for putting the grid\\n generation program together.\\n\\n===================================\\nSummary of simplified surface flux scheme:\\n\\nThe simplified surface flux formulation (following Chris's\\n suggestion and here\\n recounting his earlier email), written in terms of fluxes of dry\\n static energy and moisture, is:\\n\\n w's' = cT*( Cp*SST - s(1) )\\n w'q' = cT*( 0.98*qsat(psurf,SST) - q(1) )\\n\\nwhere s(1) and q(1) are values of s,q at the lowest model level, Cp\\n is\\n the specific heat of dry air, and qsat(psurf,SST) is the saturation\\n specific humidity at the surface pressure and sea surface\\n temperature.\\n The transfer coefficient cT is taken to be the same for humidity\\n and dry static energy (or whatever your energy/temperature variable\\n is) and can be computed as:\\n\\n cT = c_q * Uspd\\n\\nwhere Uspd is the surface windspeed and c_q is a nondimensional bulk\\ntransfer coefficient.\\n\\nOne advantage of this formulation is that we can take Uspd from\\nMinghua's case specification, so that inter-model variation in \\n surface winds due to the details of nudging or subgrid schemes won't\\n feed back onto surface fluxes.  One disadvantage is that c_q\\n depends on the height of the lowest model level.  However, we can\\n account for its variation because \\n c_q ~ kappa^2/log(z(1)/z0)/log(z(1)/zt) where kappa\\nis the von Karman constant and z0/zt are roughness lengths.  This\\ngives:\\n\\n        z(1)     c_q(z)/c_q(10)  c_q(z)*1e3\\n        2.50          1.29          1.55\\n        5.00          1.13          1.36\\n        7.50          1.05          1.26\\n       10.00          1.00          1.20\\n       12.50          0.96          1.15\\n       15.00          0.93          1.12\\n       17.50          0.91          1.09\\n       20.00          0.89          1.07\\n\\nFirst column: height of center of lowest grid level.\\nSecond column: scaling factor for c_q relative to 10m height.\\nThird column: c_q for each height * 1e3.\\n\\nThis suggests that c_q=0.0012 works pretty well for a 12.5m lowest\\nlevel (as we used in s11), but won't work as well for a 2.5m (s12)\\n or 20m (s6) lowest level.  In addition, the winds are stronger in\\n s6 and s12 than s11.  Ideally, this would suggest:\\n\\n  case   zlow     c_q       Uspd    cT=c_q*Uspd\\n    s6      20       1.07       7.88     0.0084\\n    s11    12.5    1.15       6.75     0.0078\\n    s11    2.5      1.55       6.75     0.0105  (s11 w/fine grid\\n              near surface -- optional resolution sensitivity study)\\n    s12    2.5      1.55       8.27     0.0128\\n\\nNow, in the last round, we used 0.0081 for cT in s11.  I would \\n suggest that we continue to use this value at both s11 and s6,\\n because the resulting errors are small and can be viewed as an\\n uncertainty with respect to the uncertain surface windspeed at\\n these locations.  So the recommendation for the current round of\\n simulations are above.\\n\\n\\n===============================\\nSpecification Details:\\n\\n - ALL: for the radiation, use the zenith angle from Minghua's spec\\n for each case and then adjust the solar constant and eccentricity\\n so that the top-of-atmosphere insolation matches Minghua's spec.  I\\n usually fix the eccentricity to one and adjust the solar constant\\n as necessary.\\n - ALL: for the winds, I would ask that the mean winds be nudged to\\n the sounding winds on a ten minute timescale and that the coriolis\\n terms be switched off.\\n\\n - The setup for S6 should be as before.\\n - For S11, use 5m vertical resolution through the cloud and\\n inversion layers -- in SAM, this means about 500-1800m.  Given the\\n length of the runs, it's probably better to error on the side of\\n using more levels than less.\\n - For S12, run as before but with additional nudging of the\\n specific humidity if it falls below the value, q_floor = q(p=875\\n hPa).  This means q_floor = 0.003581839 kg/kg for ctl_12 and\\n 0.004095861 kg/kg for p2k_12.  Since the free tropospheric relative\\n humidity is identical for ctl and p2k, this is a climate-invariant\\n setup.  The setup for the q nudging is as follows.\\n\\nThe qt nudging should be done at levels up to 1200m where the mean\\n value of qt falls below qt_floor=xxx g/kg (see above for values). \\n A horizontally-uniform nudging should be applied that nudges the\\n mean qt back to qt_floor on a one hour timescale.  This prevents\\n the excessive drying of the free troposphere just above the\\n inversion.  The code in SAM is as follows:\\n\\n!bloss: option for CGILS cases to avoid over-drying of sounding\\n above BL                                                                                                   \\n\\nif(doenforce_cgils_qfloor) then                                                                                                                                            \\n  do k = 1,nzm                                                                                                                                                             \\n    if((z(k).lt.ztop_qfloor).AND.(q0(k).lt.qfloor)) then                                                                                                                   \\n      dqdt_qfloor = (qfloor-q0(k))/tau_qfloor                                                                                                                              \\n      qnudge(k) = qnudge(k) + dqdt_qfloor                                                                                                                                  \\n      do j=1,ny                                                                                                                                                            \\n        do i=1,nx                                                                                                                                                          \\n          micro_field(i,j,k,index_water_vapor) &                                                                                                                           \\n               = micro_field(i,j,k,index_water_vapor) + dtn*dqdt_qfloor                                                                                                    \\n        end do                                                                                                                                                             \\n      end do                                                                                                                                                               \\n    end if                                                                                                                                                                 \\n  end do                                                                                                                                                                   \\nend if                                                                                                                                                                     \\n\\nwhere q0(k) is the mean value of qt at level k, dtn is the timestep. \\n We use value of :\\n\\nqfloor = 0.0035    ! kg/kg\\nztop_qfloor = 1200.  ! meters\\ntau_qfloor = 3600.  ! seconds\\\"\\n}}}\", \n    \"reporter\": \"vlarson@uwm.edu\", \n    \"cc\": \"vlarson@uwm.edu, dschanen@uwm.edu\", \n    \"resolution\": \"fixed\", \n    \"_ts\": \"1330018256670621\", \n    \"component\": \"clubb_src\", \n    \"summary\": \"Modifying cloud_feedback forcings to match Peter Blossey's SAM simulations\", \n    \"priority\": \"major\", \n    \"keywords\": \"\", \n    \"time\": \"2012-01-24T14:06:05\", \n    \"milestone\": \"\", \n    \"owner\": \"meyern@uwm.edu\", \n    \"type\": \"task\"\n}\n```\n"},"comment":{"url":"https://api.github.com/repos/StrikeNP/trac_test/issues/comments/397513123","html_url":"https://github.com/StrikeNP/trac_test/issues/486#issuecomment-397513123","issue_url":"https://api.github.com/repos/StrikeNP/trac_test/issues/486","id":397513123,"node_id":"MDEyOklzc3VlQ29tbWVudDM5NzUxMzEyMw==","user":{"login":"StrikeNP","id":2577059,"node_id":"MDQ6VXNlcjI1NzcwNTk=","avatar_url":"https://avatars0.githubusercontent.com/u/2577059?v=4","gravatar_id":"","url":"https://api.github.com/users/StrikeNP","html_url":"https://github.com/StrikeNP","followers_url":"https://api.github.com/users/StrikeNP/followers","following_url":"https://api.github.com/users/StrikeNP/following{/other_user}","gists_url":"https://api.github.com/users/StrikeNP/gists{/gist_id}","starred_url":"https://api.github.com/users/StrikeNP/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/StrikeNP/subscriptions","organizations_url":"https://api.github.com/users/StrikeNP/orgs","repos_url":"https://api.github.com/users/StrikeNP/repos","events_url":"https://api.github.com/users/StrikeNP/events{/privacy}","received_events_url":"https://api.github.com/users/StrikeNP/received_events","type":"User","site_admin":false},"created_at":"2018-06-15T04:52:11Z","updated_at":"2018-06-15T04:52:11Z","author_association":"OWNER","body":"**Trac update on 2012/02/08 at 18:20**\n**meyern@uwm.edu commented:**\n\nShould I keep our current calculations of wprtp and wpthlp at the surface, i.e.:\n\n\n```text\nwprtp_sfc = compute_wprtp_sfc( Cq, ubar, rtm_sfc, sat_mixrat_liq( p_sfc, T_sfc ) )\nwpthlp_sfc = compute_wpthlp_sfc( Ch, ubar, thlm_sfc, & \n                                 T_sfc, exner_sfc )\n```\nor should I change these to the simpler calculations Peter mentions above, i.e.:\n\n\n```text\nw's' = cT*( Cp*SST - s(1) )\nw'q' = cT*( 0.98*qsat(psurf,SST) - q(1) )\n```\nwhere \n\n```text\ncT = c_q * Uspd\n```\n\nI think the only other thing we would need to match his setup would be to add some sort of rt nudging for the s12 case that is suggested at the end of the email in the ticket description.  Should I add this nudging, and, if so, where would be the best place to put it?\n\n"}}
{"actor":{"display_login":"StrikeNP"}}