Hi:
I am trying to combine MFD (meshless finite difference) with exact boundary condition (ADF) in a study.
MFD in Modulus v22.07 currently only accept single Node or model as input.
ADF (Exact boundary condition) requires a combination of two networks.
First network (Node): input x, output u_star
Second network (Node): input x and u_star, output u.
Therefore, I did not find any way to use MFD with exact boundary condition in Modulus v22.07.
Hi @Spartacus
Good question. This is correct that the finite derivative node does only accept a single model. However, you can pretty easily get around this limitation for instances where multiple models/nodes are needed using Modulus’ graph systems.
To be fair this isn’t a documented solution, its essentially similar to how constraints build their graph. Creating a graph for the MFD node will chain multiple nodes together, which can then be provided as a single model. Here’s an example:
flow_net = instantiate_arch(
input_keys=[Key("x"), Key("y")],
output_keys=[Key("u"), Key("v")],
cfg=cfg.arch.fully_connected,
)
flow_net = flow_net.make_node(name="flow_network", jit=cfg.jit)
# No reason here to have a separate pressure network
# Just for demonstration of chaining nodes
pressure_net = instantiate_arch(
input_keys=[Key("u"), Key("v")],
output_keys=[Key("p")],
cfg=cfg.arch.fully_connected,
)
pressure_net = pressure_net.make_node(name="pressure_network", jit=cfg.jit)
# Random derivatives
derivatives = [Key.from_str("u__x"), Key.from_str("p__x")]
# Create graph of multiple nodes
from modulus.graph import Graph
fdm_graph = Graph([flow_net, pressure_net], invar=[Key("x"), Key("y")], req_names=[Key("u"), Key("v"), Key("p")])
# Give graph to MFD node as the model
# Graph will automatically produce output vars u,v,p from inputs x,y
fdm_node = MeshlessFiniteDerivative.make_node(
node_model=fdm_graph,
derivatives=derivatives,
dx=cfg.custom.dx,
max_batch_size=4*cfg.batch_size.interior,
double_cast=False,
)
Thank you so much for your help! It resolved my question.
This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.