Exawind / nalu-wind

Solver for wind farm simulations targeting exascale computational platforms
https://nalu-wind.readthedocs.io
Other
123 stars 83 forks source link

nrel5MWactuator* reg tests fail with segfault #1283

Open marchdf opened 1 month ago

marchdf commented 1 month ago

Information I have so far:

backtrace:

* thread #1, name = 'naluX', stop reason = signal SIGSEGV: address not mapped to object (fault address: 0x0)
  * frame #0: 0x00007fffef78c6a4 libopenfastcpplib.so`fast::OpenFAST::allocateMemory_preInit(this=0x0000000000709b50) at OpenFAST.cpp:2072:49
    frame #1: 0x00007fffef77f71c libopenfastcpplib.so`fast::OpenFAST::init(this=0x0000000000709b50) at OpenFAST.cpp:635:27
    frame #2: 0x00007ffff6bf93d0 libnalu.so`void std::__invoke_impl<void, void (fast::OpenFAST::*&)(), fast::OpenFAST*&>((null)=__invoke_memfun_deref @ 0x00007fffffff1680, __f=0x0000000000712ea0, __t=0x0000000000712eb0) at invoke.h:74:46
    frame #3: 0x00007ffff6bf9231 libnalu.so`std::__invoke_result<void (fast::OpenFAST::*&)(), fast::OpenFAST*&>::type std::__invoke<void (fast::OpenFAST::*&)(), fast::OpenFAST*&>(__fn=0x0000000000712ea0, (null)=0x0000000000712eb0) at invoke.h:96:40
    frame #4: 0x00007ffff6bf8fe8 libnalu.so`void std::_Bind<void (fast::OpenFAST::* (fast::OpenFAST*))()>::__call<void, 0ul>(this=0x0000000000712ea0, __args=0x00007fffffff16ff, (null)=_Index_tuple<0> @ 0x00007fffffff16e0) at functional:495:24
    frame #5: 0x00007ffff6bf8d8a libnalu.so`void std::_Bind<void (fast::OpenFAST::* (fast::OpenFAST*))()>::operator()<void>(this=0x0000000000712ea0) at functional:580:32
    frame #6: 0x00007ffff6bf7faa libnalu.so`void std::__invoke_impl<void, std::_Bind<void (fast::OpenFAST::* (fast::OpenFAST*))()>&>((null)=__invoke_other @ 0x00007fffffff1730, __f=0x0000000000712ea0) at invoke.h:61:36
    frame #7: 0x00007ffff6bf7684 libnalu.so`std::enable_if<is_invocable_r_v<void, std::_Bind<void (fast::OpenFAST::* (fast::OpenFAST*))()>&>, void>::type std::__invoke_r<void, std::_Bind<void (fast::OpenFAST::* (fast::OpenFAST*))()>&>(__fn=0x0000000000712ea0) at invoke.h:111:28
    frame #8: 0x00007ffff6bf68f3 libnalu.so`std::_Function_handler<void (), std::_Bind<void (fast::OpenFAST::* (fast::OpenFAST*))()>>::_M_invoke(__functor=0x00007fffffff1ce0) at std_function.h:290:30
    frame #9: 0x00007ffff6bf43d2 libnalu.so`std::function<void ()>::operator()(this=0x00007fffffff1ce0) const at std_function.h:591:9
    frame #10: 0x00007ffff6bf3d17 libnalu.so`sierra::nalu::squash_fast_output(func=function<void()> @ 0x00007fffffff1ce0) at ActuatorBulkFAST.h:81:7
    frame #11: 0x00007ffff6bed826 libnalu.so`sierra::nalu::ActuatorBulkFAST::init_openfast(this=0x0000000000709580, actMeta=0x00000000006cad90, naluTimeStep=0.0625) at ActuatorBulkFAST.C:109:23
    frame #12: 0x00007ffff6bed210 libnalu.so`sierra::nalu::ActuatorBulkFAST::ActuatorBulkFAST(this=0x0000000000709580, actMeta=0x00000000006cad90, naluTimeStep=0.0625) at ActuatorBulkFAST.C:58:16
    frame #13: 0x00007ffff6b6733a libnalu.so`sierra::nalu::ActuatorModel::setup(this=0x0000000000602290, timeStep=0.0625, stkBulk=0x00000000006cdf60) at ActuatorModel.C:87:60
    frame #14: 0x00007ffff6b62734 libnalu.so`sierra::nalu::AeroContainer::setup(this=0x0000000000602290, timeStep=0.0625, bulk=ptr = 0x6cdf60) at AeroContainer.C:89:25
    frame #15: 0x00007ffff699862d libnalu.so`sierra::nalu::Realm::initialize_prolog(this=0x00000000006c8d00) at Realm.C:434:23
    frame #16: 0x00007ffff69d3b66 libnalu.so`sierra::nalu::Realms::initialize_prolog(this=0x00000000006a17d0) at Realms.C:75:29
    frame #17: 0x00007ffff6a034d2 libnalu.so`sierra::nalu::Simulation::initialize(this=0x00007fffffff2570) at Simulation.C:184:29
    frame #18: 0x0000000000428dfa naluX`main(argc=5, argv=0x00007fffffff31a8) at nalu.C:197:19
    frame #19: 0x00007fffe739a7e5 libc.so.6`__libc_start_main + 229
    frame #20: 0x0000000000427a7e naluX`_start + 46

This is the offender:

(lldb) print globTurbineData
(std::vector<fast::turbineDataType>) size=1 {
  [0] = {
    TurbID = 1
    FASTInputFileName = "nrel5mw.fst"
    FASTRestartFileName = "blah"
    outFileRoot = ""
    dt = 0
    TurbineBasePos = size=3 {
      [0] = 0
      [1] = 0
      [2] = 0
    }
    TurbineHubPos = size=0 {}
    sType = EXTINFLOW
    numBlades = 0
    numVelPtsBlade = 0
    numVelPtsTwr = 0
    numVelPts = 0
    numForcePtsBlade = 50
    numForcePtsTwr = 20
    numForcePts = 0
    nodeClusterType = 0
    inflowType = 0
    nacelle_cd = 1
    nacelle_area = 8
    air_density = 1.22500002
    nBRfsiPtsBlade = size=0 {}
    nTotBRfsiPtsBlade = 0
    nBRfsiPtsTwr = 0
    azBlendMean = 0
    azBlendDelta = 0
    velMean = 0
    windDir = 0
    zRef = 0
    shearExp = 0
  }
}

Notice: TurbineHubPos = size=0 {} . Which means this call will fail: https://github.com/OpenFAST/openfast/blob/dev/glue-codes/openfast-cpp/src/OpenFAST.cpp#L2072

So the turbine hub position isn't getting passed in right. Not sure why yet... I tried the obvious thing and added turbine_hub_pos to the yaml input file. No luck.

marchdf commented 1 month ago

Phew figured it out. The actuator fast parser did not set the hub height.